gpt4 book ai didi

JavaFX FXML Controller key 处理程序代码不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:40 24 4
gpt4 key购买 nike

我对 FXML 和 keyPress 处理程序有疑问。

我尝试设置按键简单测试,但未调用按键处理程序。鼠标处理等工作正常,但按键处理不正确。

我尝试在 Pane、圆圈(在 Pane 中)和场景上设置 KeyHandler。

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,感谢您的回答,但我想做一些“游戏”,其中 Pane 上的简单圆圈,通过按下键盘移动。当然,专注于组件会起作用。但是没有重点。也许必须在窗口或场景上设置关键监听器?对于目的的模糊性,我深表歉意。

我尝试在按下时设置,但初始化中的场景为空。

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 类中设置。在应用程序上设置 key 处理程序,就可以了!但是,如何获取 Circle 和场景的其他组件,因为它们在 controlle.class 中 kepp

  @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();
}

现在我通过查找 scence/Parent root 来完成它

是的!查找 Parent 是工作。我只需要按 # + "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();
}

最佳答案

你的代码没有问题。我已经测试了这段代码,它对我没有任何改变。问题可能出在您的使用上。为什么要将 KeyPress 监听器添加到整个 Pane 而不是某些组件?除非未选择容器/ Pane ,否则无法识别按键。在 fxml 中添加一个 TextField 到 very if key press is recognized as below

 @FXML
private TextField testTextField;

并在 initialize() 函数中添加以下代码

testTextField.setOnKeyPressed(new EventHandler<KeyEvent>() {

@Override
public void handle(KeyEvent arg0) {
// TODO Auto-generated method stub
System.out
.println("MyController.initialize().new EventHandler() {...}.handle()");

}
});

注意:您还应该在 fxml 中添加文本字段,而不仅仅是在 Controller 中添加上述代码。

关于JavaFX FXML Controller key 处理程序代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19611942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com