Как заставить Command-W закрыть окно в Mac OS в Java или Clojure - PullRequest
11 голосов
/ 18 ноября 2010

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

1 Ответ

13 голосов
/ 18 ноября 2010

Вот один из способов:

 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.

Вероятно, было бы лучше использовать 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);      
  }
}
...