我正在JavaFX2.1中做作业,我遇到了setOnKeyPressed
方法的问题。
我的程序模拟钢琴,所以每次点击按钮都会发出声音:'Q'是'do','W'是're'等等......我也有(现在)鼠标输入,因为我不能一次玩几个音符而被禁用...
我的问题:如果我按下一个键(当然是键盘上,而不是鼠标),它的相关事件将在循环中触发......
我做了几次测试,发现只触发setOnKeyPressed
,而不是setOnKeyReleased。
我做了一些解决方法,但他们没有做我期望的事情:
有什么建议吗?
答案 0 :(得分:3)
您无法禁用多个事件,因为它是系统行为。最好的解决方案是改进布尔标志方法来存储每个键的标志。例如。下一步:
final Set<String> pressedKeys = new HashSet<String>();
keyboard.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
String note = t.getText();
if (!pressedKeys.contains(note)) {
// you may need to introduce synchronization here
pressedKeys.add(note);
playNote(note);
}
}
});
keyboard.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent t) {
pressedKeys.remove(t.getText());
}
});