如何在我的 JavaFX 应用程序中的任何位置检测 SPACE KeyEvent?
How can I detect the SPACE KeyEvent anywhere in my JavaFX app?
我想检测 KeyEvent
而不管我的 JavaFX 应用程序中哪个元素具有焦点 - 特别是,我想检测 SPACE
键。我试图向对应于我的 window:
的 Scene
添加一个监听器
scene.setOnKeyPressed(ev -> {
if (ev.getCode() == KeyCode.SPACE) {
System.out.println("GOOD");
}
});
但是如果我有一个具有焦点的特定节点(例如 ListView
或 Button
),那么它将不会被检测到。
无论用户在我的应用程序中做什么,我如何检测何时按下 SPACE
键?我不打算 中断 接收 KeyEvent
的任何节点 - 我只想 知道 如果它发生。一个(丑陋的)解决方案是将侦听器添加到我的所有节点,但如果可能的话我宁愿不这样做。
您可以通过向根节点添加事件过滤器来检测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();
}
注意:在生成弹出窗口/叠加层的控件上,space 在显示时可能不会被检测到,但在隐藏但仍处于焦点时会被检测到。如果您将 ComboBox 或 ColorPicker 添加到上面的示例中,您可以看到此行为
这是您的代码
scene.setOnKeyReleased(event ->{
if(event.getCode()== KeyCode.SPACE)
{
System.out.println("goog luck");
}
});
我想检测 KeyEvent
而不管我的 JavaFX 应用程序中哪个元素具有焦点 - 特别是,我想检测 SPACE
键。我试图向对应于我的 window:
Scene
添加一个监听器
scene.setOnKeyPressed(ev -> {
if (ev.getCode() == KeyCode.SPACE) {
System.out.println("GOOD");
}
});
但是如果我有一个具有焦点的特定节点(例如 ListView
或 Button
),那么它将不会被检测到。
无论用户在我的应用程序中做什么,我如何检测何时按下 SPACE
键?我不打算 中断 接收 KeyEvent
的任何节点 - 我只想 知道 如果它发生。一个(丑陋的)解决方案是将侦听器添加到我的所有节点,但如果可能的话我宁愿不这样做。
您可以通过向根节点添加事件过滤器来检测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();
}
注意:在生成弹出窗口/叠加层的控件上,space 在显示时可能不会被检测到,但在隐藏但仍处于焦点时会被检测到。如果您将 ComboBox 或 ColorPicker 添加到上面的示例中,您可以看到此行为
这是您的代码
scene.setOnKeyReleased(event ->{
if(event.getCode()== KeyCode.SPACE)
{
System.out.println("goog luck");
}
});