Новый windows открыт в JavaFX / f xml, но я не хочу, чтобы он открывал новую сцену - PullRequest
0 голосов
/ 26 февраля 2020

Когда я запускаю свой код, я открываю окно с 3 кнопками, чтобы нажать, то, что я хочу, это когда я нажимаю одну из кнопок, которая открывает новое окно, просто «обгонит» предыдущее окно вместо открытия нового, вызывая мне нужно 2 открытых windows вместо 1. Ниже мой GUIController:

import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

import java.io.IOException;

public class GUIController {



       public void patientVindue(ActionEvent actionEvent) throws IOException {
           FXMLLoader loader = new FXMLLoader(getClass().getResource("/patientGUI.fxml"));
           GridPane gridPane = loader.load();
           Scene scene = new Scene(gridPane);
           Stage stage = new Stage();
           stage.setScene(scene);
           stage.show();
       }

       public void lægeVindue(ActionEvent actionEvent) throws IOException {
           FXMLLoader loader = new FXMLLoader(getClass().getResource("/lægeGUI.fxml"));
           GridPane gridPane = loader.load();
           Scene scene = new Scene(gridPane);
           Stage stage = new Stage();
           stage.setScene(scene);
           stage.show();
       }

       public void sundhedsprofessionelVindue(ActionEvent actionEvent) throws IOException {
           FXMLLoader loader = new FXMLLoader(getClass().getResource("/sundhedsprofessionelGUI.fxml"));
           GridPane gridPane = loader.load();
           Scene scene = new Scene(gridPane);
           Stage stage = new Stage();
           stage.setScene(scene);
           stage.show();
       }

       public tilbageVindue(ActionEvent actionEvent) throws IOException {
           FXMLLoader loader = new FXMLLoader(getClass().getResource("/gui.fxml"));
           GridPane gridPane = loader.load();
           Scene scene = new Scene(gridPane);
           Stage stage = new Stage();
           stage.setScene(scene);
           stage.show();
       }
    }




- Добавление дополнительной информации. Это другой класс, который я использую:

public class GUI extends Application {

    @Override
    public void start(final Stage stage) throws Exception {

        FXMLLoader loader = new FXMLLoader(getClass().getResource("/gui.fxml"));
        GridPane gridPane = loader.load();
        Scene scene = new Scene(gridPane);
        stage.setScene(scene);
        stage.show();


    }
}

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Создайте одну глобальную сцену и просто установите новые сцены на эту одну сцену. Вы всегда создаете новую сцену, а затем устанавливаете новую сцену на эту новую стадию, поэтому вы всегда получаете новое 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();
        }
    }
0 голосов
/ 26 февраля 2020

вы, должно быть, создаете новую сцену для этого окна, я бы посоветовал вам сделать сцену c, а затем передать эту сцену на эту сцену

...