JavaFX密钥快捷方式

时间:2016-10-24 11:27:07

标签: javafx-8

我正在使用JavaFX开发音频播放器。我离结尾不远,但我在管理我的密钥快捷方式时遇到了一些困难。

作为一个例子,在主窗口(播放器组件所在的位置),我想影响"右边"在歌曲中前进的关键:

SoundLooper.getInstance().getPrimaryStage().getScene().setOnKeyReleased(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        ...
        } else if (event.getCode() == KeyCode.RIGHT) {
            // RIGHT : Move in media +3s
            player.moveMediaTime(3000);
            event.consume();
        ...
    }

此快捷方式直接分配给窗口,无论聚焦字段如何都处于活动状态。这很有效。

现在,我在此窗口中有一个微调器字段来更改音量(用户可以在此处写入0到100之间的值)。我对它进行了过滤,仅接受数字:

spinnerVolume.addEventFilter(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent event) {
        if (!event.getCharacter().matches("[1-9]")) {
            event.consume();
        }
    }
});

我认为这样做,left和rigth键将不再适用于此spinner字段,但它仍然有效。现在,当我输入右键时,有2个动作:

  1. 在微调器中移动光标
  2. 在歌曲中前进
  3. 无论聚焦字段如何,我都希望使用rigth键前进,但如果此fied可以使用此键(例如文本字段),则不需要。我怎么能这样做?

    另一个例子。当用户键入转义键时,我希望应用程序中的所有对话框都关闭。我有一个对话框,其中只包含一个可编辑的组合框,以及一个&#34; OK&#34;按钮。 我使用相同类型的代码来影响我的对话框的这个键:

    stage.getScene().setOnKeyReleased(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent e) {
            if (e.getCode() == KeyCode.ENTER) {
                validate();
            } else if (e.getCode() == KeyCode.ESCAPE) {
                cancel();
            }
        }
    });
    

    如果组合框文本字段已聚焦,则转义键无效(&#34;句柄&#34;方法未被调用)。如果我&#34;离开&#34;这个字段使用TAB键,然后键入escape,对话框关闭良好。 如果我更换:

    else if (e.getCode() == KeyCode.ESCAPE)
    

    通过

    else if (e.getCode() == KeyCode.RIGHT)
    

    即使文本字段是聚焦的,弹出窗口也会关闭正确的键入方法...

    我确定我错过了什么,有人可以告诉我最好的方法吗?

    谢谢,

0 个答案:

没有答案