Come avere Command-W chiudere una finestra su Mac OS in Java o Clojure


Mi piacerebbe avere + W chiude una finestra / JFrame in un programma che sto scrivendo in Clojure. Come potrebbe essere realizzato? Anche le soluzioni Java pure sono benvenute.

Author: Jasper, 2010-11-18

1 answers

Ecco un modo:

 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()));

Metti quel Action in un menu sulla barra dei menu. L'acceleratore sarà Ctrl + W su Windows.

Probabilmente meglio sarebbe usare l'API Keybinding per avere il pannello principale in ogni JFrame (supponendo che ce ne siano più) associare lo stesso KeyStroke come sopra nella sua (WHEN_FOCUSED) mappa di input a un'azione nella sua mappa di azione che chiude il frame.

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);      
  }
}
 13
Author: ColinD, 2016-01-08 04:26:49