Comment avoir Command-W fermer une fenêtre sur Mac OS en Java ou Clojure


J'aimerais avoir + W fermer une fenêtre/JFrame dans un programme, que je suis en train d'écrire en Clojure. Comment cela peut-il être réalisé? Les solutions Java pures sont également les bienvenues.

Author: Jasper, 2010-11-18

1 answers

Voici une façon:

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

Mettez ce Action dans un menu de votre barre de menus. L'accélérateur sera Ctrl + W sur Windows.

Probablement mieux serait d'utiliser le Keybinding API pour que le panneau principal dans chaque JFrame (en supposant qu'il y en ait plusieurs) lie le même KeyStroke que ci-dessus dans sa carte d'entrée (WHEN_FOCUSED) à une action dans sa carte d'action qui ferme le cadre.

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