JavaFX 场景中的多个按键 [英] Multiple key press on JavaFX scene
问题描述
如何在单个场景中检测到多个关键事件?我需要我的程序来检测空格键和何时同时按下.
How are multiple key events detected in a single scene? I need my program to detect when the space bar and the right arrow keys are pressed simultaneously.
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
public void handle(KeyEvent ke) {
if (ke.getCode() == KeyCode.RIGHT) {
///
}
if (ke.getCode() == KeyCode.LEFT) {
///
}
if (ke.getCode() == KeyCode.SPACE) {
///
}
if (ke.getCode() == KeyCode.RIGHT && ke.getCode() == KeyCode.SPACE) {
// How??
}
}
});
前 3 个表达式查找单个键并且工作正常.最后的表达式永远不会返回 true.我相信只有最新的关键事件会传递给处理程序.
The first 3 expressions look for a single key and work fine. The final expression never returns true. I believe only the latest key event is passed to the handler.
我查看了 KeyCodeCombination,但是这似乎用于当键具有指定列表中的修饰键(ALT_DOWN、SHIFT_DOWN、等).
I looked at KeyCodeCombination, however this appears to be for use in cases when a key has a modifier key from a specified list (ALT_DOWN, SHIFT_DOWN, etc).
我可以使用 FX 中的实用程序吗?
Is there a utility in FX that I can use?
推荐答案
试试这个:
final BooleanProperty spacePressed = new SimpleBooleanProperty(false);
final BooleanProperty rightPressed = new SimpleBooleanProperty(false);
final BooleanBinding spaceAndRightPressed = spacePressed.and(rightPressed);
// How to respond to both keys pressed together:
spaceAndRightPressed.addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<Boolean> obs, Boolean werePressed, Boolean arePressed) {
System.out.println("Space and right pressed together");
}
});
// Wire up properties to key events:
scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode() == KeyCode.SPACE) {
spacePressed.set(true);
} else if (ke.getCode() == KeyCode.RIGHT) {
rightPressed.set(true);
}
}
});
scene.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent ke) {
if (ke.getCode() == KeyCode.SPACE) {
spacePressed.set(false);
} else if (ke.getCode() == KeyCode.RIGHT) {
rightPressed.set(false);
}
}
});
这篇关于JavaFX 场景中的多个按键的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!