KeyListeners Tidak Menjawab dalam JPanel: Isu Biasa
Apabila menggunakan KeyListeners untuk mengesan ketukan kekunci dalam JPanel, pembangun sering menghadapi isu di mana pendengar gagal mencetuskan tindakan yang diingini. Masalah ini boleh timbul daripada beberapa faktor.
Kekangan Komponen Fokus
KeyListeners bergantung pada melekatkan diri mereka pada komponen yang difokuskan untuk berfungsi dengan betul. Secara lalai, fokus tidak diberikan secara automatik kepada JPanel. Untuk menyelesaikan isu ini, tetapkan kebolehfokusan secara eksplisit dan minta fokus dalam pembina JPanel:
<code class="java">public JPanel extends JPanel implements KeyListener { public JPanel() { this.addKeyListener(this); this.setFocusable(true); this.requestFocusInWindow(); }</code>
Alternatif: Pengikatan Kunci
Sambil menetapkan fokus secara manual ialah penyelesaian yang berdaya maju, pendekatan yang lebih mantap ialah menggunakan Pengikat Utama. Pengikatan Utama menyediakan mekanisme yang fleksibel untuk mengaitkan ketukan kekunci dengan tindakan tertentu. Untuk melaksanakan pengikatan kekunci dalam JPanel:
<code class="java">public JPanel extends JPanel implements ActionListener { public JPanel() { setupKeyBinding(); this.setFocusable(true); this.requestFocusInWindow(); } private void setupKeyBinding() { int condition = JComponent.WHEN_IN_FOCUSED_WINDOW; InputMap inMap = getInputMap(condition); ActionMap actMap = getActionMap(); inMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "Left"); actMap.put("Left", new leftAction()); } private class leftAction extends AbstractAction { public void actionPerformed(ActionEvent e) { System.out.println("test"); } } }</code>
Dalam contoh ini, kelas leftAction mentakrifkan tindakan yang akan dilakukan apabila kekunci anak panah kiri ditekan (dalam kes ini, mencetak "ujian" ke konsol) .
Atas ialah kandungan terperinci Mengapa Pendengar Kunci Saya Tidak Berfungsi dalam JPanel Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!