Pendengar Kunci Tidak Responsif untuk JFrame: Penyelesaian Komprehensif
Kekurangan respons daripada KeyListener dalam Java JFrame boleh dikaitkan dengan beberapa potensi punca. Walaupun anda mungkin telah berjaya memulakan pendengar dalam pembina, tumpuan mungkin tidak diarahkan kepada JFrame, menghalang penerimaan peristiwa penting.
Melaksanakan KeyEventDispatcher
Untuk memintas isu berkaitan fokus ini, pendekatan alternatif melibatkan penambahan KeyEventDispatcher tersuai pada KeyboardFocusManager. Pendekatan ini amat berfaedah jika anda ingin mendaftarkan pendengar untuk berbilang komponen dan bukannya secara individu untuk setiap satu. Berikut ialah contoh pelaksanaan:
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); } }
Dalam contoh yang diubah suai ini, kelas KeyDispatcher tersuai, MyDispatcher, dilaksanakan. Kaedah dispatchKeyEvent dalam kelas ini mengendalikan peristiwa penting yang berbeza (ditekan, dikeluarkan, ditaip) dan mencetak mesej yang sesuai ke konsol. Dengan mendaftarkan penghantar ini dengan KeyboardFocusManager, anda memastikan semua peristiwa penting, tanpa mengira komponen yang difokuskan, dipintas dan diproses. Ini secara berkesan menggantikan keperluan untuk berbilang pendengar pada komponen individu.
Kesimpulan
Dengan melaksanakan KeyEventDispatcher, anda boleh menyelesaikan isu KeyListener yang tidak responsif dalam JFrame dengan berkesan. Pendekatan ini membolehkan anda mengendalikan acara penting tanpa mengira fokus, menyediakan penyelesaian yang lebih komprehensif dan fleksibel untuk aplikasi dipacu acara anda.
Atas ialah kandungan terperinci Mengapa Pendengar Kunci Saya dalam JFrame Tidak Responsif, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!