在我的应用程序中,我有一个使用加速器的屏幕。我使用功能键F3在我的应用程序中执行操作。它每次都可以正常工作,但是当我点击此屏幕上的任何TextField时,功能键不会执行。
以下是我设置加速器的代码:
scene.getAccelerators().put(
new KeyCodeCombination(KeyCode.F3),
new Runnable() {
@Override
public void run() {
// do sth here
}
}
);
当我单击我的文本字段然后点击F3功能键时,它不起作用。 有人知道解决方案吗?
答案 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 事件将此函数添加到场景中的每个元素