Java - KeyListener

 
Vista:
sin imagen de perfil
Val: 27
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

KeyListener

Publicado por jose (12 intervenciones) el 16/04/2020 02:26:31
Hola,soy bastante nuevo en java y estoy intentando entender como funciona lo de capturar teclas.En basic simplemente ponia un inkey y listo.
Mire por internet y entre todos los ejemplos que vi,el que me parecio mas sencillo fue este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.awt.Dimension;
import java.lang.reflect.InvocationTargetException;
 
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
 
public final class Inkey implements Runnable {
 
	public static void main(String[] args) throws InterruptedException, InvocationTargetException {
		SwingUtilities.invokeAndWait(new KeyPressTester());
	}
 
	@Override
	public void run(){
		frame = new JFrame("KeyPress Tester");
		frame.setSize(new Dimension(800, 600));
		frame.setFocusable(true);
		frame.setVisible(true);
	}
 
	private JFrame frame;
	frame.addKeyListener(new KeyListener()){
 
	}
	@Override
	public void keyTyped(KeyEvent e) {
	}
 
	@Override
	public void keyReleased(KeyEvent e) {
	}
 
	@Override
	public void keyPressed(KeyEvent e){
		System.out.println("Key Character: " + e.getKeyChar() + "; Key Code: " + KeyEvent.getKeyText(e.getKeyCode()));
	}
}

(((Es el codigo del programa entero)))

El caso es que al intentar compilar me da los siguientes errores:

1
2
3
4
5
Inkey.java:22: error: <identifier> expected
        frame.addKeyListener(new KeyListener()){
                            ^
Inkey.java:22: error: illegal start of type
        frame.addKeyListener(new KeyListener()){

He mirado por internet si la linea que da el error se escribe de alguna otra manera ,pero parece que esta bien escrita,así que no se que puede estar pasando. Si alguien sabe y puede ayudarme con lo que esta pasando aqui se lo agradecería muchisimo....llevo ya 2 dias intentando entender como hacer el KeyListener y aún no he conseguido que me funcione ningún programa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Camilo
Val: 110
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

KeyListener

Publicado por Camilo (25 intervenciones) el 16/04/2020 04:50:33
Buenas noches, quizá este código pueda ayudarle, a mi me funciona.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
 
public class Inkey extends KeyAdapter {
 
    public static void main(String[] args) {
        Inkey KeyPressTester = new Inkey();
    }
 
    public Inkey(){
        JFrame frame = new JFrame("KeyPress Tester");
        frame.setBounds(100, 100, 400, 400);
        frame.setFocusable(true);
        frame.setVisible(true);
        frame.addKeyListener((KeyListener) this);
    }
 
    @Override
    public void keyPressed(KeyEvent e){
        System.out.print("Key Character: " + e.getKeyChar() + "; ");
        System.out.println("Key Code: " + KeyEvent.getKeyText(e.getKeyCode()));
    }
}

Buena suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

KeyListener

Publicado por Kabuto (1381 intervenciones) el 16/04/2020 11:16:51
El código está mal escrito: entre otras cosas se intenta iniciar la clase KeyPressTester, cuando en realidad la clase se llama Inkey y la implementación de los métodos del KeyListener, están fuera de la declaración en línea del KeyListener.
Además el JFrame no tiene indicado que hacer al cerrar ventana, con lo cuál aunque se cierre la ventana, se queda funcionando en segundo plano y consumiendo memoria.

Reescrito como está abajo, ya funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.lang.reflect.InvocationTargetException;
 
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
 
public final class Inkey implements Runnable {
 
	private JFrame frame;
 
	public static void main(String[] args) throws InterruptedException, InvocationTargetException {
		SwingUtilities.invokeAndWait(new Inkey());
	}
 
	@Override
	public void run(){
		frame = new JFrame("KeyPress Tester");
		frame.setSize(new Dimension(800, 600));
		frame.setFocusable(true);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.addKeyListener(new KeyListener() {
 
			@Override
			public void keyTyped(KeyEvent e) { }
 
			@Override
			public void keyPressed(KeyEvent e) {
				System.out.println("Key Character: " + e.getKeyChar() + "; Key Code: " + KeyEvent.getKeyText(e.getKeyCode()));
 
			}
 
			@Override
			public void keyReleased(KeyEvent e) { }
 
		});
	}
}

Aunque funcione, no te conformes con copiar códigos, ni mal escritos ni bien....

Pregunta lo que no entiendas.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 27
Ha aumentado su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

KeyListener

Publicado por jose (12 intervenciones) el 16/04/2020 16:43:47
Muchas gracias a los dos, he probado los 2 codigos que me poneis y funcionan ambos,aunque en el de Camilo he tenido que añadir "import java.awt.event.KeyAdapter;" para que compilase.
---------
Si,jejej,esa es la intencion,ver como funciona esto para ponerlo en otro programa, lo que pasa que no me salia hiciera lo que hiciera, ahora voy a mirar bien como va para enterarme.
Muchas gracias a los dos otra vez :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

KeyListener

Publicado por jendy (2 intervenciones) el 01/02/2023 05:27:43
Venga a cosas nuevas en la vida; en otras territorial io palabras, cambiemos el viento para hacer que la atmósfera en la vida sea diferente y mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar