Как заставить Command-W закрыть окно в Mac OS на Java или Clojure

Я хотел бы иметь + W закрыть окно /JFrame в программе, которую пишу в Clojure. Как это можно сделать? Чистые Java-решения также приветствуются.

Ответ 1

Здесь один из способов:

 Action closeWindow = new AbstractAction("Close Window") {
   @Override public void actionPerformed(ActionEvent e) {
     // window closing code here
   }
 };
 closeWindow.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(
     KeyEvent.VK_W, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));

Поместите это Action в меню на панели меню. Ускоритель будет Ctrl + W в Windows.

Вероятно, лучше было бы использовать Keybinding API, чтобы главная панель в каждом JFrame (при условии, что существует несколько) связывает те же KeyStroke, что и выше, в его (WHEN_FOCUSED) входной карте на действие в своей карте действий, которая закрывает кадр.

public class ClosableWindow extends JFrame {
  public void setUp() {
    JPanel mainPanel = createMainPanel();

    int mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
    KeyStroke closeKey = KeyStroke.getKeyStroke(KeyEvent.VK_W, mask);

    mainPanel.getInputMap().put(closeKey, "closeWindow");        

    mainPanel.getActionMap().put("closeWindow", 
        new AbstractAction("Close Window") {
          @Override public void actionPerformed(ActionEvent e) {
            setVisible(false);
            dispose();
          }
        });

    getContentPane().add(mainPanel);      
  }
}