как закрыть одну сцену и открыть другую? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть этап, который я заполнил содержанием.Теперь я хочу закрыть / скрыть эту сцену.Я читал, что close / hide были эквивалентны, поэтому я не знаю, что использовать.После закрытия этапа я открою новый класс и сделаю новый этап, если есть простой способ переслать старый этап в новый класс и переключить содержимое, я также мог бы использовать это решение.

Я думаю«primaryStage» скрыт в «start» и не может быть доступен из «handle», и именно поэтому вызывает проблему, но я не знаю решения.

public class Main extends Application implements EventHandler<ActionEvent> {

    Button btn1, btn2;

    public static void main(String[] args) {
        launch(args);
    }

    public void start(Stage primaryStage) throws Exception {

        primaryStage.setTitle("title");

        btn1 = new Button("new");
        btn2 = new Button ("continue");

        btn1.setOnAction(this);
        btn2.setOnAction(this);

        VBox vb = new VBox (btn1, btn2);
        vb.setSpacing(10);
        vb.setPadding(new Insets(20));


        BorderPane root = new BorderPane();
        root.setBottom(vb);

        Scene scene = new Scene (root, 300, 250);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    @Override
    public void handle(ActionEvent event) {

        if (event.getSource()==btn1) {
            // primaryStage.hide();
            NewClassWithStage newStage = new NewClassWithStage();

        }else if (event.getSource()==btn2) {
            // primaryStage.close();
            NewClassWithStage newStage = new NewClassWithStage();
        }
    }
}

1 Ответ

1 голос
/ 25 июля 2019

Так что я бы не стал implements EventHandler<ActionEvent> делать все сложнее, вы должны попробовать что-то вроде этого, чтобы увидеть, как вы все еще можете контролировать primaryStage, если ваша функция запуска все еще

public class Main extends Application {

    Button btn1, btn2;

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("title");

        btn1 = new Button("new");
        btn2 = new Button ("continue");

        btn1.setOnAction(event -> {
            primaryStage.hide();
            NewClassWithStage newStage = new NewClassWithStage();
        });
        btn2.setOnAction(event -> {
            primaryStage.show();
            NewClassWithStage newStage = new NewClassWithStage();
        });

        VBox vb = new VBox (btn1, btn2);
        vb.setSpacing(10);
        vb.setPadding(new Insets(20));


        BorderPane root = new BorderPane();
        root.setBottom(vb);

        Scene scene = new Scene (root, 300, 250);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) { launch(args); }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...