Rumah >Java >javaTutorial >Mengapakah KeyListener JFrame saya tidak bertindak balas kepada tekanan kekunci?
Dalam percubaan untuk melaksanakan KeyListener untuk JFrame, pembangun menghadapi isu yang membingungkan: KeyListener nampaknya tidak bertindak balas , tanpa mesej muncul dalam konsol apabila kekunci ditekan. Mengesyaki kekurangan tumpuan pada JFrame, pembangun meminta bantuan.
Setelah diperiksa dengan teliti, didapati bahawa KeyListener sememangnya ditambah dengan betul dan fokus telah ditetapkan dengan sewajarnya. Walau bagaimanapun, elemen penting telah tiada: mekanisme untuk menyebarkan peristiwa penting kepada KeyListener.
Penyelesaian terletak pada penggunaan KeyEventDispatcher. Penghantar ini boleh ditakrifkan sebagai kelas dalaman dalam JFrame dan ditambah pada KeyboardFocusManager. Kaedah dispatchKeyEvent penghantar mengendalikan semua peristiwa penting, termasuk keyPressed, keyReleased dan keyTyped. Dengan melaksanakan mekanisme ini, KeyListener boleh menangkap dan bertindak balas kepada peristiwa penting dengan berkesan.
Di bawah ialah contoh kod diubah suai yang menggabungkan KeyEventDispatcher:
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); } }
Dengan pengubahsuaian ini, KeyListener kini akan berjaya menerima dan memproses peristiwa penting, memberikan output yang diharapkan dalam konsol.
Atas ialah kandungan terperinci Mengapakah KeyListener JFrame saya tidak bertindak balas kepada tekanan kekunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!