Как я могу настроить Swing JFrame для закрытия на Cmd-W? - PullRequest
2 голосов
/ 28 апреля 2011

В OS X пользователи ожидают, что смогут нажать Cmd-W, чтобы закрыть окно.

Можно ли настроить JFrame для этого?

Ответы [ 2 ]

3 голосов
/ 28 апреля 2011

Как правило, сочетания клавиш для окон верхнего уровня обрабатываются исключительно базовой ОС. Таким образом, на Mac они должны быть уже там, в другой системе нет мета-ключа (хотя и не уверен, что, может быть, имеет некоторую симуляцию).

В любом случае, вы можете добавить любую дополнительную привязку клавиш к корневой панели JFrame:

private void addMacCloseBinding(JFrame frame) {
    frame.getRootPane().getActionMap().put("close-window", new CloseAction(frame));
    frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
        .put(KeyStroke.getKeyStroke("control W"), "close-window");
    frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
        .put(KeyStroke.getKeyStroke("meta W"), "close-window");
}

public class CloseAction extends AbstractAction {

    private Window window;
    public CloseAction(Window window) {
        this.window = window;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (window == null) return;
        window.dispatchEvent(new WindowEvent(
                window, WindowEvent.WINDOW_CLOSING));
    }

}
1 голос
/ 28 апреля 2011

Вы можете указать ярлык меню следующим образом:

menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, 
                        ActionEvent.META_MASK));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...