gpt4 book ai didi

javafx - 如何使用三个或更多键创建 JavaFX KeyCombination?

转载 作者:行者123 更新时间:2023-12-04 12:06:58 26 4
gpt4 key购买 nike

我正在用 JavaFX 创建一个简单的文本编辑器。
我发现我可以通过使用向菜单项添加快捷方式

MenuItem.setAccelerator(KeyCombination.keyCombination("Ctrl+S"))

我打算将这个用于常用的 MenuItem s 在我的应用程序中,例如 Save、Open 等。只要我只使用两个键(例如 Ctrl+S)就可以正常工作,但我还想创建一些包含三个键的组合,例如 Save All 选项,在许多程序中都有快捷键 Ctrl+S+A(与 Save 相同,但有一个额外的 A,逻辑上代表 All)。

这带来了一个问题。
JavaFX 不允许我在 KeyCombination.keyCombination(String) 中使用两个以上的键。方法。我只是在运行应用程序时遇到错误。

我一如既往地使用谷歌,但我找不到任何关于使用两个以上键的信息,所以我决定在这里问一个问题。

我想知道如何设置两个以上的键(我目前需要三个)作为 MenuItem 的快捷方式在 JavaFX 中。

最佳答案

问题是 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());
});
}

编写自己的 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);
}
}

并在您的菜单中使用它。
item.setAccelerator(new MultipleKeyCombi(KeyCode.A, KeyCode.S));

这应该有效。

我在这里写了一个原型(prototype) Bitbucket Repo

关于javafx - 如何使用三个或更多键创建 JavaFX KeyCombination?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29064225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com