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

时间:2010-11-17 22:48:41

标签: java macos clojure keyboard-shortcuts

我希望 + W 在我在Clojure中编写的程序中关闭窗口/ JFrame。这怎么可能实现?也欢迎纯Java解决方案。

1 个答案:

答案 0 :(得分:13)

这是一种方式:

 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放在菜单栏的菜单中。 Windows上的加速器将为 Ctrl + W

可能更好的方法是使用Keybinding API让每个JFrame中的主面板(假设有多个)绑定与上面相同的KeyStrokeWHEN_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);      
  }
}