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

标签 java macos clojure keyboard-shortcuts

我想让 + W 在我用 Clojure 编写的程序中关闭窗口/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 中的主面板(假设有多个)在其 (WHEN_FOCUSED) 输入映射中将相同的 KeyStroke 绑定(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);      
  }
}

关于java - 如何让 Command-W 在 Mac OS 上用 Java 或 Clojure 关闭窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4209975/

相关文章:

java - BaseGame Util 无法解析为类型

java - JTextPane 中消失的组件

objective-c - Mac OS X : start on launch while in app store?

function - 如何使 Clojure 函数采用可变数量的参数?

java - 在 Java 中重新安排计时器

macos - NSMenuItem 操作未执行

c - 中止陷阱 : 6 error when working with array in C

clojure - 如何在 Clojure 中区分缺失键和值为 nil 的键?

string - 如何检索作为 Clojure 中的列表的 HashMap 中的键的值?

Java:public static final double 不能设置为小数?