Capturar la tecla Enter o cualquier otra tecla en un evento en Java

java_base_web

Hola a todos, hoy os explicare como capturar teclas concretas en un evento en Java. Es posible que quieras realizar alguna acción al pulsar algún botón concreto, como hemos visto hasta ahora con los eventos, el evento mas adecuado es el KeyListener.

Supongamos que queremos que aparezca un mensaje al pulsar Enter y si pulsamos Escape saldremos de la aplicación.

Podemos usar unas constantes muy útiles de KeyEvent, que empiezan por VK_ y siguen con el nombre de la tecla.

El código en principio sería así:

import java.awt.EventQueue;
import java.awt.event.*;
import javax.swing.*;

public class EjemploCapturar extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					EjemploCapturar frame = new EjemploCapturar();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public EjemploCapturar() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setLayout(null);
		setContentPane(contentPane);

		//Eventos

		contentPane.addKeyListener(new KeyListener(){
			public void keyTyped(KeyEvent e){
				//Aqui no funcionara
			}
			public void keyPressed(KeyEvent e){
				if(e.getKeyCode()==KeyEvent.VK_ENTER){
					JOptionPane.showMessageDialog(contentPane, "Has pulsado Enter");
				}
				if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
					System.exit(0);
				}
			}
			public void keyReleased(KeyEvent e){
				//Aqui tambien puedes insertar el codigo
			}
		});
	}

}

Si pruebas el siguiente código, no funcionara. Debemos usar el método setFocusable(false) del componente contentPane, lo añadimos, así quedaría:

import java.awt.EventQueue;
import java.awt.event.*;
import javax.swing.*;

public class EjemploCapturar extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					EjemploCapturar frame = new EjemploCapturar();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public EjemploCapturar() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setLayout(null);
		setContentPane(contentPane);

		//Invocamos el método, ahora si funcionara
		contentPane.setFocusable(true);

		//Eventos

		contentPane.addKeyListener(new KeyListener(){
			public void keyTyped(KeyEvent e){
				//Aqui no funcionara
			}
			public void keyPressed(KeyEvent e){
				if(e.getKeyCode()==KeyEvent.VK_ENTER){
					JOptionPane.showMessageDialog(contentPane, "Has pulsado Enter");
				}
				if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
					System.exit(0);
				}
			}
			public void keyReleased(KeyEvent e){
				//Aqui tambien puedes insertar el codigo
			}
		});
	}

}

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Etiquetas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *