问题 如何让Command-W在Java或Clojure中关闭Mac OS上的窗口


我想要  + w ^ 关闭一个窗口/JFrame 在我在Clojure写的一个程序中。这怎么可能实现?也欢迎纯Java解决方案。


7305
2017-11-17 22:48


起源



答案:


这是一种方式:

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

13
2017-11-17 23:04