将全局键监听器附加到多个按钮
Attach global key listener to several buttons
我正在创建一个程序,让用户定义按钮,然后将音符发送到合成器。
制作您自己的自定义键盘。
现在这个键盘也应该对全局自定义热键做出反应。
问题就在这里:
为了使它们全局化,我将它们附加到场景中,但随后每个新设置的热键都会覆盖以前的热键。
有一些代码:
btn.getScene().setOnKeyPressed((KeyEvent e) -> {
if (e.getText().equals(hotkey)) {
btn.arm();
btn.fire();
}
});
btn.getScene().setOnKeyReleased((KeyEvent e) -> {
if (e.getText().equals(hotkey)) {
btn.disarm();
}
});
想到的直接解决方案是创建一个跟踪所有热键的数组列表,并让 keylistener 每次都对其进行迭代,以及另一个带有关联按钮的数组列表。
是否有更优雅、更直接的方式?
使用两个数组列表来跟踪热键和关联按钮最终会导致您遇到一个复杂的解决方案,您必须实现一种关联热键和按钮的方法。
基于此,听起来使用地图可以解决您的问题。具有映射到关联按钮的特定热键的键值对。
查看有关 Map 的 java 文档以了解所有方法:
https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
只需选择最适合您需求的实现即可。
我正在创建一个程序,让用户定义按钮,然后将音符发送到合成器。 制作您自己的自定义键盘。
现在这个键盘也应该对全局自定义热键做出反应。
问题就在这里: 为了使它们全局化,我将它们附加到场景中,但随后每个新设置的热键都会覆盖以前的热键。 有一些代码:
btn.getScene().setOnKeyPressed((KeyEvent e) -> {
if (e.getText().equals(hotkey)) {
btn.arm();
btn.fire();
}
});
btn.getScene().setOnKeyReleased((KeyEvent e) -> {
if (e.getText().equals(hotkey)) {
btn.disarm();
}
});
想到的直接解决方案是创建一个跟踪所有热键的数组列表,并让 keylistener 每次都对其进行迭代,以及另一个带有关联按钮的数组列表。
是否有更优雅、更直接的方式?
使用两个数组列表来跟踪热键和关联按钮最终会导致您遇到一个复杂的解决方案,您必须实现一种关联热键和按钮的方法。
基于此,听起来使用地图可以解决您的问题。具有映射到关联按钮的特定热键的键值对。
查看有关 Map 的 java 文档以了解所有方法:
https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
只需选择最适合您需求的实现即可。