KeyListener на функциональных клавишах - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу прослушивать нажатие клавиши F3 внутри моего JFrame. Как это возможно?

Примерно так:

this.addKeyListener(new KeyAdapter() {
    @Override
    public void keyTyped(KeyEvent e) {
        if (e.getKeyCode() == F3)
            MyFrame.this.dispose();
    }
});

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

Если я хочу сделать это. GetInputMap () в моем JFrame, это невозможно

Потому что JFrame НЕ является JComponent.

Вы добавляете привязки клавиш к JComponent. В этом случае вы добавили бы привязки клавиш в «корневую панель» JFrame.

Прочтите раздел из учебника по Swing на Как использовать корневые панели для получения основной информации.

Я также показал вам, как получить доступ к корневой панели в приведенной выше ссылке на Связывания клавиш .

0 голосов
/ 17 апреля 2019

Используя решение от Benson99 в качестве трамплина, я думаю, что следующее должно работать.

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;

public class KeyListenFrame extends JFrame {

    public KeyListenFrame() {

        JFrame frame = new JFrame();
        frame.setTitle("Key Listener Frame - Press F3 to close frame");
        frame.setSize(600, 300);

        frame.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_F3) {
                    System.out.println("Pressed " + e.getKeyCode());
                    System.out.println("Closing frame");
                    frame.dispose();
                } else {
                    System.out.println("Pressed " + e.getKeyCode());
                }
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }
        });
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        KeyListenFrame keyListenFrame = new KeyListenFrame();
    }
}
0 голосов
/ 16 апреля 2019

Вы должны использовать keyPressed для функциональных клавиш.Попробуйте этот код и нажмите клавиши.Функциональные клавиши не запускают события, набранные клавишей.

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setSize(200,200);

    frame.addKeyListener(new KeyListener() {
        @Override
        public void keyTyped(KeyEvent e) {
            System.out.println("from keyTyped: " + e.getKeyCode());
        }

        @Override
        public void keyPressed(KeyEvent e) {                
            System.out.println("from keyPressed: " + e.getKeyCode());
        }

        @Override
        public void keyReleased(KeyEvent e) {

        }
    });
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
...