1
컨트롤러가 두 개 있습니다 (authcontroller
및 maincontroller
). 메서드 레지스터가 새 창을 엽니 다 - register.fxml. 내가 처음 창에서 Stage
을 얻으려고 곳Javafx 스테이지가 null입니다.
register.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
Stage stage = new Stage();
AnchorPane pane = null;
try {
pane = FXMLLoader.load(getClass().getResource("/fxml/register.fxml"));
} catch (IOException e) {
e.printStackTrace();
}
stage.setTitle("Регистрация в системе");
Scene scene = new Scene(pane, 600, 450);
stage.setResizable(false);
stage.setScene(scene);
stage.show();
}
});
는 그리고 나서이 방법이 두 번째 컨트롤러는, 초기화합니다.
@Override
public void initialize(URL location, ResourceBundle resources) {
Stage stage = (Stage) tabOnePane.getScene().getWindow();
}
tabOnePane
은 두 번째 창에서 탭 패널입니다. 그러나 이것을 시도하면 내 Stage
은 항상 null입니다. 하지만 다른 처리 방법으로 Stage
을 얻으려고하면 할 수 있습니다. 내 두 번째 창이로드되었을 때 첫 번째 창 Stage
을 얻는 방법?
초 컨트롤러는 인터페이스를 구현 Initializable
그것은이 작업을 수행하는 나쁜 생각입니다. initialize 메소드에서'Window'를 얻는다면, 당신은 씬에 추가되는'tabOnePane'과 그 씬이 윈도우에 추가되는 것에 의존합니다. 따라서 코드를 유지 관리하기가 어렵습니다. 당신은 컨트롤러 클래스 밖에서 그 스테이지로 무엇을 하든지 할 수있는 방법을 찾아야합니다. 어쨌든 fxml을로드하기 전에 어떻게 tabOnePane을 장면에 추가 할 수 있었습니까? – fabian
fx : id를 사용하여 fxml-file에서 tabOnePane을 추가했습니다. 불행하게도이 클래스를이 클래스에 사용해야합니다. 왜냐하면 나중에 두 번째 클래스에서 사용할 속성을 제공하기 때문입니다. – Artificial