在javaFX中通过KeyCombination触发事件

时间:2014-03-31 00:12:40

标签: java keyboard-shortcuts java-8 javafx-8

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

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 键即可触发该事件。关于为什么这么做的任何想法?

1 个答案:

答案 0 :(得分:4)

KeyCodeCombination构造函数中所有修饰符的默认值为RELEASED。因此,保存快捷方式与 S 键匹配, Shift 已发布, Alt 已发布, Meta 已发布,按下或释放控制(您指定的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);

将匹配适合平台的快捷键(例如, Ctrl + S 在Windows上 Cmd + S 在Mac上。)