我对 FXML 和 keyPress 处理程序有疑问。
我尝试设置按键简单测试,但未调用按键处理程序。鼠标处理等工作正常,但按键处理不能。
我试图在窗格、圆圈(在窗格中)和场景上设置密钥处理程序。
public class Controller implements Initializable {
public Pane canvas;
public Label yDisplay;
public Label xDisplay;
public Circle circle;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
canvas.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
System.out.println("Test");
}
});
}
}
尊敬的 Dil,谢谢您的回答,但我想做一些“游戏”,窗格上的简单圆圈,通过按键盘移动。当然,专注于组件将起作用。但是没有重点。也许必须在窗口或场景上设置关键侦听器?我为目的模糊而道歉。
我试图在按下时设置,但在初始化中的场景是空的。
public class Controller implements Initializable {
@FXML private Pane canvas;
@FXML private Label yDisplay;
@FXML private Label xDisplay;
@FXML private Circle circle;
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
canvas.getScene().setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
System.out.println("Work");
}
});
canvas.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
canvas.getChildren().add(new Bullet(150.0, 150.0, mouseEvent.getX(), mouseEvent.getY()));
}
});
}
}
这是逻辑,我试图在 Apllication 类中设置。在应用程序上设置密钥处理程序,它的工作!但是,如何获取 Circle 和场景的其他组件,因为它们在 controlle.class 中
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root));
primaryStage.getScene().setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
System.out.println("HEY");
}
});
primaryStage.show();
}
现在我通过查找场景/父根来完成它
是的!查找父母是工作。我只需要通过 # + "id" 进行搜索
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root));
primaryStage.getScene().setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
System.out.println("HEY");
Circle myCirecle = (Circle) root.lookup("#circle");
myCirecle.setTranslateY(10.0);
}
});
primaryStage.show();
}