Heim >Java >javaLernprogramm >Warum reagiert der KeyListener meines JFrames nicht?
Nicht reagierender KeyListener für JFrame: Tastaturinteraktivität freischalten
Bei Ihrem Versuch, einen KeyListener für Ihren JFrame zu implementieren, sind Sie auf ein verwirrendes Problem gestoßen, bei dem der KeyListener schien trotz ordnungsgemäßer Registrierung nicht zu reagieren.
Der Fokus-Rätsel
Ihr anfänglicher Verdacht, dass der Fokus nicht auf dem JFrame lag, ist ein weit verbreitetes Missverständnis. Standardmäßig hat der JFrame den Fokus, wenn er sichtbar wird. Es lohnt sich jedoch, dies noch einmal zu überprüfen, indem Sie requestFocus() auf dem JFrame aufrufen.
Einführung des KeyEventDispatcher
Wenn der Fokus nicht der Übeltäter ist, sollten Sie die Verwendung eines KeyEventDispatcher in Betracht ziehen. Mit diesem leistungsstarken Mechanismus können Sie wichtige Ereignisse erfassen, unabhängig davon, welche Komponente den Fokus hat.
Beispielcode
Der folgende Codeausschnitt zeigt, wie Sie Ihrem JFrame einen KeyEventDispatcher hinzufügen:
public class MyFrame extends JFrame { private class MyDispatcher implements KeyEventDispatcher { @Override public boolean dispatchKeyEvent(KeyEvent e) { if (e.getID() == KeyEvent.KEY_PRESSED) { System.out.println("tester"); } else if (e.getID() == KeyEvent.KEY_RELEASED) { System.out.println("2test2"); } else if (e.getID() == KeyEvent.KEY_TYPED) { System.out.println("3test3"); } return false; } } public MyFrame() { add(new JTextField()); System.out.println("test"); KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); manager.addKeyEventDispatcher(new MyDispatcher()); } public static void main(String[] args) { MyFrame f = new MyFrame(); f.pack(); f.setVisible(true); } }
Mit diesem erweiterten Code können Sie jetzt wichtige Ereignisse erfassen und die gewünschten Aktionen ausführen, wodurch das anfängliche Problem eines Problems effektiv gelöst wird nicht reagierender KeyListener.
Das obige ist der detaillierte Inhalt vonWarum reagiert der KeyListener meines JFrames nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!