Как закрыть JFrame, если я нажимаю escape в любом месте внутри JFrame (не только в конкретном текстовом поле или т. Д .;)?

1

Я знаю, как закрыть jframe, если я в каком-то текстовом поле или кнопке и т.д. Используя метод keyPressed(), я обрабатываю ключевые события для текстовых полей, кнопок. Но я хочу, чтобы jframe был закрыт, когда я нажимаю escape куда угодно (не только в определенных текстовых полях и т.д.) Внутри jframe. Является ли это возможным?

  • 6
    Вы можете использовать сочетания клавиш на JFrame содержимого панели «s
  • 2
    «Я хочу, чтобы jframe был закрыт, когда я нажимаю escape в любом месте». Это поведение по умолчанию JOptionPane .
Показать ещё 1 комментарий
Теги:
swing
jframe
keylistener
key-bindings

1 ответ

0

Если ход управляющего ключа не привязан к фокусовому подкомпоненту, тогда должно работать следующее:

// mainFrame is the JFrame

Action dispatchClosing = new AbstractAction() {
    public void actionPerformed(ActionEvent event) {
        mainFrame.dispatchEvent(
            new WindowEvent(mainFrame, WindowEvent.WINDOW_CLOSING));
        }
    };

KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0);

JRootPane rootPane = mainFrame.getRootPane();
rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escape, "closeWindow");
rootPane.getActionMap().put("closeWindow", dispatchClosing); 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню