Rumah >Java >javaTutorial >Mengapa Pendengar Kunci Saya Tidak Membalas dalam JFrame Saya?

Mengapa Pendengar Kunci Saya Tidak Membalas dalam JFrame Saya?

Linda Hamilton
Linda Hamiltonasal
2024-11-11 08:56:03465semak imbas

Why is My KeyListener Not Responding in My JFrame?

Pendengar Kunci Tidak Responsif untuk JFrame: Menggunakan KeyEventDispatcher

Anda mengalami KeyListener yang tidak bertindak balas kerana tumpuan mungkin bukan pada JFrame. Untuk menangani perkara ini, pertimbangkan untuk menambah KeyEventDispatcher yang berasingan pada KeyboardFocusManager.

Dalam contoh kod berikut, kelas MyDispatcher ditakrifkan dan ditambahkan pada KeyboardFocusManager:

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);
    }
}

Penghantar ini mengendalikan semua kunci acara tanpa mengira fokus komponen, mencetak mesej ke konsol. Pendekatan ini memastikan KeyListener anda akan menerima input papan kekunci walaupun fokus tidak langsung pada JFrame.

Atas ialah kandungan terperinci Mengapa Pendengar Kunci Saya Tidak Membalas dalam JFrame Saya?. 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