StackPane скрыть окно вне основного класса - PullRequest
0 голосов
/ 12 марта 2019

возможно ли скрыть или закрыть сцену в JavaFx со стеком за пределами класса со стеком?Если нет, то как я могу это сделать?Например, здесь я хочу скрыть или закрыть window1 и показать window2, когда я нажимаю на кнопку Window 2.Спасибо.

package application;

import javafx.application.Application;
import javafx.stage.Stage;
import view.StackP;
import javafx.scene.Scene;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            StackP root = new StackP();
            Scene scene = new Scene(root,1280,720);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

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

класс StackPane:

package view;


import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;


public class StackP extends BorderPane{

    private Button btnMenu1;

    private Window1 win1;
    private Window2 win2;

    private StackPane stack;

    public StackP() {
        this.setCenter(getStack());
        hideAll();
        this.getWin1().setVisible(true);
    }

    public void hideAll() {
        for(Node child:getStack().getChildren()) {
            child.setVisible(false);
        }
    }

    public Button getBtnMenu1() {
        if(btnMenu1==null) {
            btnMenu1=new Button("Menu 1");
            btnMenu1.setOnAction(new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent arg0) {
                    hideAll();
                    getWin1().setVisible(true);

                }
            });
        }
        return btnMenu1;
    }

    public Window1 getWin1() {
        if(win1==null) {
            win1=new Window1();
        }
        return win1;
    }
    public Window2 getWin2() {
        if(win2==null) {
            win2=new Window2();
        }
        return win2;
    }

    public StackPane getStack() {
        if(stack==null) {
            stack=new StackPane();
            stack.getChildren().addAll(getWin1(),getWin2());

        }
        return stack;
    }
}

Класс window1:

package view;

import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;

public class Window1 extends GridPane{

    private Label lbl1;
    private Button win2;

    public Window1() {
        this.setPadding(new Insets(10,10,10,10));
        this.setGridLinesVisible(true);
        this.add(getWin2(), 1, 0);
        this.add(getLbl1(), 3, 1);
    }

    public Label getLbl1() {
        if(lbl1==null) {
            lbl1=new Label("A label");
        }
        return lbl1;
    }

    public Button getWin2() {
        if(win2==null) {
            win2=new Button("Window 2");
        }
        return win2;
    }
}

Класс window2:

package view;

import javafx.geometry.Insets;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;

public class Window2 extends GridPane{

    private TextField txt1;

    public Window2() {
        this.setPadding(new Insets(10,10,10,10));
        this.setGridLinesVisible(true);
        this.add(getTxt1(), 3, 1);
    }

    public TextField getTxt1() {
        if(txt1==null) {
            txt1=new TextField();
        }
        return txt1;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...