我正在尝试设置保存文件的快捷方式。

public static final KeyCombination saveShortcut = new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_ANY);

我通过以下方式触发操作:
sceneRoot.addEventHandler(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {
            if (saveShortcut.match(event)) {
                saveProject.fire();
            }
        }

    });

但是,仅按S键即可触发该事件。关于为什么这样的任何想法?

最佳答案

KeyCodeCombination构造函数中所有修饰符的默认值为RELEASED。因此,您的保存快捷方式与按下Shift释放,Alt释放,Meta释放和Control的键S按下或释放(您指定的ANY值匹配按下或释放)相匹配。

如果您只想匹配Ctrl + S,则应使用

public static final KeyCombination saveShortcut = new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN);

更好的是
public static final KeyCombination saveShortcut = new KeyCodeCombination(KeyCode.S, KeyCombination.SHORTCUT_DOWN);

与适用于该平台的快捷键相匹配(例如,在Windows上为Ctrl + S,在Mac上为Cmd + S)。

09-05 09:24