Jaz*_*rok 3 java controller javafx handle fxml
我有FXML和keyPress处理程序的问题.
我尝试设置按键简单测试,但不调用键处理程序.鼠标处理等工作正常,但键处理没有.
我尝试在Pane上设置KeyHandler,圆圈(在Pane中)和场景.
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");
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
尊重Dil,thx为你的答案,但我想做一些"游戏",在窗格上的简单圆圈,通过按键在键盘上移动.当然,专注于compmonent会起作用.但没有专注.也许必须在窗口或场景上设置关键监听器?我为目的模糊而道歉.
我尝试按下按钮,但初始化中的场景为空.
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()));
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这是逻辑,我试图在Apllication类中设置.在Application上设置密钥处理程序,它的工作正常!但是,如何获得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();
}
Run Code Online (Sandbox Code Playgroud)
现在我把它与查看场景/父根相关联
是! 查找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();
}
Run Code Online (Sandbox Code Playgroud)
您的代码没有问题.我测试了这段代码,它对我没有任何改变.问题可能与您的使用有关.为什么要将KeyPress监听器添加到整个窗格而不是某些组件?除非未选择容器/窗格,否则无法识别按键.如果按下键按下,则在fxml中添加一个TextField
@FXML
private TextField testTextField;
Run Code Online (Sandbox Code Playgroud)
并在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()");
}
});
Run Code Online (Sandbox Code Playgroud)
注意:您还应该在fxml中添加文本字段,而不仅仅是在控制器中添加上面的代码.
归档时间: |
|
查看次数: |
8608 次 |
最近记录: |