Dan*_*ist 6 javafx keyboard-shortcuts
我正在用JavaFX创建一个简单的文本编辑器.
我发现我可以通过使用添加菜单项的快捷方式
MenuItem.setAccelerator(KeyCombination.keyCombination("Ctrl+S"))
Run Code Online (Sandbox Code Playgroud)
我将把它用于MenuItem我的应用程序中经常使用的s,例如Save,Open等.只要我只使用两个键,例如Ctrl+ S,这个工作正常,但我也想用三个键创建一些组合,例如Save All选项,在许多程序中都有快捷键Ctrl+ S+ A(与Save相同,但有一个额外的A,逻辑上代表All).
这带来了一个问题.
JavaFX不允许我使用该KeyCombination.keyCombination(String)方法使用两个以上的键.我运行应用程序时遇到错误.
我一如既往地使用谷歌,但我找不到任何关于使用两个以上密钥的信息,所以我决定在这里提问.
我想知道如何设置两个以上的密钥(我目前需要三个)作为MenuItemJavaFX中的一个快捷方式.
问题是KeyEvent只有一个KeyCode。所以不可能让 KeyCombination 匹配多个 KeyCode。
但是你可以尝试这样的事情:
将所有按下的键存储到一个列表中(也许您必须对 keyPressed 使用事件侦听器)
@Override
public void initialize(URL location, ResourceBundle resources) {
scene.setOnKeyPressed((event) -> {
codes.add(event.getCode());
});
scene.setOnKeyReleased((event) -> {
codes.remove(event.getCode());
});
}
Run Code Online (Sandbox Code Playgroud)
编写自己的 KeyCombi 类
private class MultipleKeyCombi extends KeyCombination {
private List<KeyCode> neededCodes;
public MultipleKeyCombi(KeyCode... codes) {
neededCodes = Arrays.asList(codes);
}
@Override
public boolean match(KeyEvent event) {
return codes.containsAll(neededCodes);
}
}
Run Code Online (Sandbox Code Playgroud)
并在您的菜单中使用它。
item.setAccelerator(new MultipleKeyCombi(KeyCode.A, KeyCode.S));
Run Code Online (Sandbox Code Playgroud)
这应该有效。
我在这里写了一个原型Bitbucket Repo
| 归档时间: |
|
| 查看次数: |
3552 次 |
| 最近记录: |