JavaFX - 当textfield具有焦点时,加速器不工作

时间:2015-01-30 15:21:20

标签: java javafx javafx-8 accelerator

在我的应用程序中,我有一个使用加速器的屏幕。我使用功能键F3在我的应用程序中执行操作。它每次都可以正常工作,但是当我点击此屏幕上的任何TextField时,功能键不会执行。

以下是我设置加速器的代码:

    scene.getAccelerators().put(
            new KeyCodeCombination(KeyCode.F3),
            new Runnable() {
                @Override
                public void run() {
                    // do sth here
                }
            }
    );

当我单击我的文本字段然后点击F3功能键时,它不起作用。 有人知道解决方案吗?

2 个答案:

答案 0 :(得分:1)

此答案基于tikerman。我添加了代码来处理修饰键。

if (!event.getCode().isModifierKey()) {
    Consumer<KeyCombination.Modifier[]> runAccelerator = (modifiers) -> {
        Runnable r = getScene().getAccelerators().get(new KeyCodeCombination(event.getCode(), modifiers));
        if (r != null) {
            r.run();
        }
    };

    List<KeyCombination.Modifier> modifiers = new ArrayList<>();
    if (event.isControlDown()) modifiers.add(KeyCodeCombination.CONTROL_DOWN);
    if (event.isShiftDown()) modifiers.add(KeyCodeCombination.SHIFT_DOWN);
    if (event.isAltDown()) modifiers.add(KeyCodeCombination.ALT_DOWN);

    runAccelerator.apply(modifiers.toArray(new KeyCombination.Modifier[modifiers.size()]));
}

编辑:修复消费者拼写。

答案 1 :(得分:-1)

我正在使用 JavaFx+Scene 构建器,然后创建一个函数将所有事件重定向到相应的函数,然后使用 OnKeyReleased 事件将此函数添加到场景中的每个元素