FXML 및 keyPress 처리기에 문제가 있습니다.JavaFX FXML 컨트롤러 키 처리기 코드가 작동하지 않습니다.
키 누름 간단한 테스트를 설정하려고하지만 키 핸들러가 호출되지 않습니다. 마우스 조작 등은 올바르게 작동하지만 키 처리에는 문제가 없습니다.
나는 창, 원 (창에서) 및 장면에 setKeyHandler를 시도했다.
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, 당신의 답변을 들으 존경,하지만 난 창에 간단한 원, 키 보즈 언론 이동 일부 "게임"을했다합니다. 물론, compmonent에 초점을 맞추면 효과가 있습니다. 그러나 초점은 없습니다. 어쩌면 창이나 장면에 키 수신기를 설정해야할까요? 목적의 모호함에 대해 사과드립니다.
언론에서 설정하려했지만 초기화에서 scence가 null입니다.
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 클래스에서 설정했습니다. 응용 프로그램에서 키 처리기를 설정하면 작업이 완료됩니다! 그러나, 어떻게 얻을 서클 장면의 다른 구성 요소, 그들은 지금 난에서 scence/학부모 루트의 조회
예와 함께 할 공동
@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();
}
controlle.class
에 kepp 렸기 때문에! 학부모의 조회는 업무입니다. # + "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();
}
룩업을 사용하여 원을 얻을 수 있지만이를 수행하는 표준 방법이 있습니다. 서클을 가져 오기 위해 getter 메소드를 컨트롤러에 작성하십시오 (예 : getCircle()). getController API를 사용하여 fxmlLoader에서 컨트롤러를 가져옵니다. 그런 다음 getCircle 메소드를 사용하여 원을 얻을 수 있습니다. – Dil