【问题标题】:How do I implement Ctrl+Z / Command+Z in Java/Swing?如何在 Java/Swing 中实现 Ctrl+Z / Command+Z?
【发布时间】:2011-05-26 20:05:40
【问题描述】:

我正在开发一个需要撤消/重做功能的 Java 小程序。这是设置热键的代码(在 Windows 上效果很好)。

我的问题是:如何让它在 mac 上使用 command+Z?我应该只检查 System.getProperty("os.name") 还是有更优雅的选择?

private void setupUndoHotkeys() {
    String UNDO = "Undo action key";
    String REDO = "Redo action key";
    Action undoAction = new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            undo();
        }
    };
    Action redoAction = new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            redo();
        }
    };

    getActionMap().put(UNDO, undoAction);
    getActionMap().put(REDO, redoAction);

    InputMap[] inputMaps = new InputMap[] {
        getInputMap(JComponent.WHEN_FOCUSED),
        getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT),
        getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW),
    };
    for(InputMap i : inputMaps) {
        i.put(KeyStroke.getKeyStroke("control Z"), UNDO);
        i.put(KeyStroke.getKeyStroke("control Y"), REDO);
    }
}

谢谢,

尼尔

【问题讨论】:

    标签: java swing hotkeys


    【解决方案1】:

    啊,没关系,我在这里找到了它http://www.devdaily.com/blog/post/jfc-swing/how-program-apple-command-key-keystroke-java-swing-mac-osx

    这应该在任何平台上都可以撤消。

    KeyStroke.getKeyStroke(KeyEvent.VK_Z, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())
    

    【讨论】:

    • 这适用于撤消(ctrl-Z 与 cmd-Z),但不适用于重做(ctrl-Y 与 Shift-cmd-Z)。我担心重做击键需要 os.name。
    • @ChristopherBruns 恐怕你是对的。如果方便的话,Microsoft Office Mac 一直使用 Cmd+Y 直到 2011 年。
    • 以上代码已弃用,还有其他可行的替代方案吗?
    猜你喜欢
    • 2011-05-11
    • 2011-03-03
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多