Nicht reagierender KeyListener für JFrame: Verwendung eines KeyEventDispatcher
Sie erleben einen nicht reagierenden KeyListener, da der Fokus möglicherweise nicht auf dem JFrame liegt. Um dieses Problem zu beheben, sollten Sie erwägen, dem KeyboardFocusManager einen separaten KeyEventDispatcher hinzuzufügen.
Im folgenden Codebeispiel wird eine MyDispatcher-Klasse definiert und dem KeyboardFocusManager hinzugefügt:
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); } }
Dieser Dispatcher verarbeitet alle Tasten Ereignisse unabhängig vom Komponentenfokus, Ausgabe von Meldungen an die Konsole. Dieser Ansatz stellt sicher, dass Ihr KeyListener Tastatureingaben empfängt, auch wenn der Fokus nicht direkt auf dem JFrame liegt.
Das obige ist der detaillierte Inhalt vonWarum reagiert mein KeyListener in meinem JFrame nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!