Переключение между сценами в javaFX без сценостроителя - PullRequest
0 голосов
/ 22 мая 2018

У меня возникли небольшие проблемы с поиском того, как я могу переключаться между сценами в javafX.

В приведенном ниже примере я хочу переключиться с Testscherm на Testscherm2 при нажатии кнопки 1, но у меня нетИдея, как это сделать, я застрял с этим на века ..

Это мой код:

Класс Testscherm:

public class Testscherm extends VBox {

    private Label label1;
    private Button Button2;
    private TextField txf1;

    public Testscherm() {
        buildGui();
    }

    public void buildGui() {
        label1 = new Label("label1");
        Button2 = new Button("click me");
        txf1 = new TextField();

        this.getChildren().addAll(label1, Button2, txf1);

        Button2.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent e) {

            }
        });

    }
}

Класс Testscherm2:

public class Testscherm2 extends VBox{
    private Label scherm1;
    private Button scherm2;
    private Label trol;

    public Testscherm2() {
        buildGui();
    }

    public void buildGui() {
        scherm1 = new Label("scherm1");
        scherm2 = new Button("scherm2");
        trol = new Label("trol");

        this.getChildren().addAll(scherm1, scherm2, trol);
    }
}

Класс запуска:

public class StartUp extends Application {



 public Stage primaryStage;

    @Override
    public void start(Stage primaryStage) {
        //eerste scherm
        Testscherm ts = new Testscherm();
        Scene scene1 = new Scene(ts, 400, 400);

        //tweede scherm
        Testscherm2 ts2 = new Testscherm2();
        Scene scene2 = new Scene(ts2, 400, 400);

        primaryStage.setTitle("TestScherm");
        primaryStage.show();
    }

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

1 Ответ

0 голосов
/ 22 мая 2018

Просто создайте экземпляр Testscherm2, когда вам это нужно:

public class Testscherm extends VBox {

    private Label label1;
    private Button Button2;
    private TextField txf1;

    public Testscherm() {
        buildGui();
    }

    public void buildGui() {
        label1 = new Label("label1");
        Button2 = new Button("click me");
        txf1 = new TextField();

        this.getChildren().addAll(label1, Button2, txf1);

        Button2.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent e) {
                Testscherm2 ts2 = new Testscherm2();
                getScene().setRoot(ts2);
            }
        });

    }

}

и

public class StartUp extends Application {

    public Stage primaryStage;

    @Override
    public void start(Stage primaryStage) {
        //eerste scherm
        Testscherm ts = new Testscherm();
        Scene scene1 = new Scene(ts, 400, 400);

        priamryStage.setScene(scene1);
        primaryStage.setTitle("TestScherm");
        primaryStage.show();
    }

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

}

Если вам нужна большая гибкость (например, вы хотите переключиться назад идалее между представлениями) разложим «текущее состояние представления» в нечто вроде модели представления:

public class CurrentViewState {


    private final Parent view1 ;
    private final Parent view2 ;

    private final ObjectProperty<Parent> currentView ;

    public CurrentViewState() {
        view1 = new Testscherm(this);
        view2 = new Testscherm2(this);
        currentView = new SimpleObjectProperty<>(view1);
    }

    public ObjectProperty<Parent> currentViewProperty() {
        return currentView ;
    }

    public final Parent getCurrentView() {
        return currentViewProperty().get();
    }

    public final void setCurrentView(Parent currentView) {
        currentViewProperty().set(currentView);
    }

    public Parent getView1() {
        return view1 ;
    }

    public Parent getView2() {
        return view2 ;
    }
}

А затем:

public class Testscherm extends VBox {

    private Label label1;
    private Button Button2;
    private TextField txf1;

    private final CurrentViewState viewState ;

    public Testscherm(CurrentViewState viewState) {
        this.viewState = viewState ;
        buildGui();
    }

    public void buildGui() {
        label1 = new Label("label1");
        Button2 = new Button("click me");
        txf1 = new TextField();

        this.getChildren().addAll(label1, Button2, txf1);

        Button2.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent e) {
                viewState.setCurrentView(viewState.getView2());
            }
        });

    }

}

и

public class StartUp extends Application {

    public Stage primaryStage;

    @Override
    public void start(Stage primaryStage) {
        //eerste scherm

        CurrentViewState viewState = new CurrentViewState();
        Scene scene = new Scene(viewState.getCurrentView(), 400, 400);
        scene.rootProperty().bind(viewState.currentViewProperty());

        primaryStage.setScene(scene);

        primaryStage.setTitle("TestScherm");
        primaryStage.show();
    }

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

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