Rumah >Java >javaTutorial >Mengapakah KeyListener JFrame saya tidak bertindak balas kepada tekanan kekunci?

Mengapakah KeyListener JFrame saya tidak bertindak balas kepada tekanan kekunci?

Susan Sarandon
Susan Sarandonasal
2024-11-13 03:17:021063semak imbas

Why is my JFrame's KeyListener not responding to key presses?

Pendengar Kunci Tidak Responsif untuk JFrame: Misteri Terselesai

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn