通过javaFX中的KeyCombination触发事件

mel*_*ldi 3 java keyboard-shortcuts java-8 javafx-8

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

public static final KeyCombination saveShortcut = new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_ANY);
Run Code Online (Sandbox Code Playgroud)

我通过以下方式触发操作:

sceneRoot.addEventHandler(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {
            if (saveShortcut.match(event)) {
                saveProject.fire();
            } 
        }

    });
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*s_D 5

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

如果您希望仅匹配Ctrl+ S,则应使用

public static final KeyCombination saveShortcut = new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN);
Run Code Online (Sandbox Code Playgroud)

更好的是

public static final KeyCombination saveShortcut = new KeyCodeCombination(KeyCode.S, KeyCombination.SHORTCUT_DOWN);
Run Code Online (Sandbox Code Playgroud)

这将快捷键适当的平台(例如匹配Ctrl+ S在Windows和Cmd+ S在Mac)。