代码之家  ›  专栏  ›  技术社区  ›  Jeremy Meo

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

  •  11
  • Jeremy Meo  · 技术社区  · 15 年前

    我想要 ⌘ + 西 关上窗户/ JFrame 在我用Clojure编写的程序中。如何才能做到这一点?纯Java解决方案也很受欢迎。

    1 回复  |  直到 14 年前
        1
  •  13
  •   silvalli    9 年前

    有一种方法:

     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键 + 西 在窗户上。

    最好是使用 Keybinding 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);      
      }
    }
    
    推荐文章