Pendengar Kunci Tidak Responsif untuk JFrame: Menggunakan KeyEventDispatcher
Anda mengalami KeyListener yang tidak bertindak balas kerana tumpuan mungkin bukan pada JFrame. Untuk menangani perkara ini, pertimbangkan untuk menambah KeyEventDispatcher yang berasingan pada KeyboardFocusManager.
Dalam contoh kod berikut, kelas MyDispatcher ditakrifkan dan ditambahkan pada KeyboardFocusManager:
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); } }
Penghantar ini mengendalikan semua kunci acara tanpa mengira fokus komponen, mencetak mesej ke konsol. Pendekatan ini memastikan KeyListener anda akan menerima input papan kekunci walaupun fokus tidak langsung pada JFrame.
Atas ialah kandungan terperinci Mengapa Pendengar Kunci Saya Tidak Membalas dalam JFrame Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!