Vol*_*ort 5 java javafx keyevent
我想检测KeyEvent,无论什么元素具有焦点在我的JavaFX应用程序-尤其是,我要检测的SPACE关键。我尝试向Scene与我的窗口相对应的监听器添加一个监听器:
scene.setOnKeyPressed(ev -> {
if (ev.getCode() == KeyCode.SPACE) {
System.out.println("GOOD");
}
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我有一个具有焦点的特定节点(如 aListView或Button),则不会检测到它。
SPACE无论用户在我的应用程序中做什么,我如何检测按键何时被按下?我不打算中断正在接收的任何节点KeyEvent- 我只是想知道它是否发生。一种(丑陋的)解决方案是将侦听器添加到我的所有节点,但如果可能的话,我宁愿不这样做。
小智 3
您可以通过在根节点添加事件过滤器来检测KeyEvent
这是一个使用您提到的一些控件的简单示例:
@Override
public void start(Stage primaryStage) throws Exception{
TextField textfield = new TextField();
ListView listView = new ListView();
listView.getItems().add("One");
listView.getItems().add("Two");
listView.getItems().add("Three");
Button button = new Button("Button");
VBox root = new VBox(5, textfield, listView, button);
root.addEventFilter(KeyEvent.KEY_PRESSED, event->{
if (event.getCode() == KeyCode.SPACE) {
System.out.println("GOOD");
}
});
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(10));
primaryStage.setScene(new Scene(root, 400, 400));
primaryStage.show();
}
Run Code Online (Sandbox Code Playgroud)
注意:在生成弹出窗口/叠加层的控件上,显示时可能不会检测到空格,但在隐藏但仍处于焦点状态时会检测到。如果您向上面的示例添加 ComboBox 或 ColorPicker,您可以看到此行为
| 归档时间: |
|
| 查看次数: |
3929 次 |
| 最近记录: |