Pendengar Kunci Tidak Responsif untuk JFrame: Membuka Kunci Interaktiviti Papan Kekunci
Dalam usaha anda untuk melaksanakan KeyListener untuk JFrame anda, anda menghadapi isu yang membingungkan di mana KeyListener nampaknya tidak bertindak balas, walaupun betul berdaftar.
Teka-teki Fokus
Kecurigaan awal anda bahawa tumpuan bukan pada JFrame adalah tanggapan yang salah. Secara lalai, JFrame mempunyai fokus apabila ia kelihatan. Walau bagaimanapun, ia patut disemak semula dengan memanggil requestFocus() pada JFrame.
Memperkenalkan KeyEventDispatcher
Jika fokus bukan puncanya, pertimbangkan untuk menggunakan KeyEventDispatcher. Mekanisme berkuasa ini membolehkan anda menangkap peristiwa penting tanpa mengira komponen mana yang mempunyai fokus.
Kod Contoh
Coretan kod berikut menunjukkan cara menambah KeyEventDispatcher pada JFrame anda:
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 kod yang dipertingkatkan ini, anda kini boleh menangkap peristiwa penting dan melakukan tindakan yang diingini, menyelesaikan isu awal KeyListener yang tidak responsif.
Atas ialah kandungan terperinci Mengapa Pendengar Kunci JFrame Saya Tidak Menjawab?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!