Rumah > Java > javaTutorial > Mengapa Pendengar Kunci Saya Tidak Berfungsi dalam JPanel Saya?

Mengapa Pendengar Kunci Saya Tidak Berfungsi dalam JPanel Saya?

Linda Hamilton
Lepaskan: 2024-10-28 07:32:02
asal
496 orang telah melayarinya

Why Aren't My KeyListeners Working in My JPanel?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan