Estoy desarrollando una aplicación java con swing en Windows.Cómo evitar presionar la tecla ALT quita el foco de mi GUI
El problema es: después de presionar (y soltar) la tecla ALT, la siguiente pulsación de tecla no tiene efecto (no habrá un evento activado por tecla). Solo se reconocerá la liberación de la siguiente clave. Al presionar y soltar CTRL o SHIFT después de ALT no tiene ningún efecto. Primero debe presionar otra tecla o hacer clic en el componente para recibir eventos clave desde CTRL o SHIFT nuevamente.
Probablemente, Windows aleja el foco de mi componente GUI hacia el título/menú del marco. Necesito ALT + MouseWheel para mover un gráfico en mi aplicación, si después quiero ampliar el gráfico con CTRL + MouseWheel, esto no funcionará. Entonces, ¿cómo detener ALT de quitar el foco (pero aún así poder acceder a un elemento de menú con, por ejemplo, ALT + F)?
Ya probé Component.requestFocus() - pero en realidad mi componente no pierde realmente el foco.
Un ejemplo simple que muestra el comportamiento:
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
class MyKeyListener implements KeyListener {
public void keyTyped(KeyEvent arg0) {}
public void keyPressed(KeyEvent arg0) {
System.out.println("Key perssed: " + arg0.getKeyCode());
}
public void keyReleased(KeyEvent arg0) {
System.out.println("Key released: " + arg0.getKeyCode());
}
}
public class KeyListenerDemo {
public static void main(String[] a) {
JFrame frame = new JFrame("Keytest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setFocusTraversalKeysEnabled(true);
JTextField textField = new JTextField();
textField.addKeyListener(new MyKeyListener());
frame.add(textField);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
¿Podría consumir() los KeyEvents para la tecla ALT? Supongo que el problema con esto sería que rompería la funcionalidad normal de la tecla ALT en Windows. –
no, quiero mantener Windows funcionalmente: para acceder a la barra de menú. Entonces, en realidad, la pregunta no es cómo evitar el interruptor de enfoque, sino cómo recuperar el foco. –
tipo de solución: Scott, tenías razón. en mi caso, el consumo() realmente funcionó. Puedo usar ALT junto con la rueda del mouse para mi funcionalidad, pero aún así acceder al menú con, p. ALT + F –