Создайте одну глобальную сцену и просто установите новые сцены на эту одну сцену. Вы всегда создаете новую сцену, а затем устанавливаете новую сцену на эту новую стадию, поэтому вы всегда получаете новое windows.
MainApp, которое запускает страницу входа:
public class MainApp extends Application {
private Stage primaryStage;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Access The Unicorn World");
showLogin(this.primaryStage);
}
public static void showLogin(Stage primaryStage) {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/Login.fxml"));
loader.setController(new LoginController(primaryStage));
Parent loginLayout = loader.load();
primaryStage.setScene(new Scene(loginLayout));
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Тогда для страницы входа у меня есть Контроллер, который я установил выше и прошел этап. На странице входа в систему я могу сделать следующее, когда у кого-то нет учетной записи, и я хочу открыть окно регистрации:
private Stage primaryStage;
public LoginController(Stage primaryStage) {
this.primaryStage = primaryStage;
}
@FXML
void onRegisterAction(ActionEvent event) {
showRegister(this.primaryStage);
}
public static void showRegister(Stage primaryStage) {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/Register.fxml"));
loader.setController(new RegisterController(primaryStage));
Parent registerLayout = loader.load();
primaryStage.setScene(new Scene(registerLayout));
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}