Macos 如何配置Swing JFrame以在Cmd-W上关闭?
在OSX上,用户希望能够按Cmd-W关闭窗口Macos 如何配置Swing JFrame以在Cmd-W上关闭?,macos,swing,Macos,Swing,在OSX上,用户希望能够按Cmd-W关闭窗口 我可以配置JFrame来执行此操作吗?您应该能够像这样指定菜单快捷方式: menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, ActionEvent.META_MASK)); 通常,顶级窗口的键绑定由底层操作系统专门处理。所以在Mac上,它们应该已经存在了,在另一个系统上,没有元密钥(?不确定,不过,可能有一些模拟) 无论如何,
我可以配置JFrame来执行此操作吗?您应该能够像这样指定菜单快捷方式:
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,
ActionEvent.META_MASK));
通常,顶级窗口的键绑定由底层操作系统专门处理。所以在Mac上,它们应该已经存在了,在另一个系统上,没有元密钥(?不确定,不过,可能有一些模拟) 无论如何,您可以向JFrame的根窗格添加任何附加的键绑定:
private void addMacCloseBinding(JFrame frame) {
frame.getRootPane().getActionMap().put("close-window", new CloseAction(frame));
frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("control W"), "close-window");
frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT)
.put(KeyStroke.getKeyStroke("meta W"), "close-window");
}
public class CloseAction extends AbstractAction {
private Window window;
public CloseAction(Window window) {
this.window = window;
}
@Override
public void actionPerformed(ActionEvent e) {
if (window == null) return;
window.dispatchEvent(new WindowEvent(
window, WindowEvent.WINDOW_CLOSING));
}
}
谢谢-我必须删除聚焦组件的
WHEN\u consensor\u
约束,以使其在我的特定情况下(一个JFrame,其中一个JFreeChart ChartPanel作为其唯一的子项)工作,但除此之外,这正是关键所在。