Как правило, сочетания клавиш для окон верхнего уровня обрабатываются исключительно базовой ОС. Таким образом, на 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));
}
}