我想让⌘+ W在用Clojure编写的程序中关闭window/JFrame。如何做到这一点?也欢迎使用纯Java解决方案。

最佳答案

这是一种方法:

 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中的主面板(假设有多个)将其(KeyStroke)输入映射中的上述WHEN_FOCUSED绑定(bind)到其 Action 图中的 Action 上,以关闭框架。
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);
  }
}

10-08 19:05