在场景JavaFX之间切换

时间:2016-05-13 13:16:04

标签: javafx scene stage switching

我在class1中创建了一个场景,然后我在class2中创建了一个scene2。 如何在它们之间切换?

public class class1 extends Application{

Stage window1;
BorderPane layout1;
Scene scene1;

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

@Override
public void start(Stage primaryStage) throws Exception {
    window1 = primaryStage;
    window.setTitle("Stage 1");

    // And here is a button which switchs between scenes or stages,
    //i dont know what is better.So:

button.setOnAction(e -> ?????????)



    scene1 = new Scene(layout1, 800,600);
    window1.show();
}
}

这是我有另一个场景的第二堂课。

public class class2 extends Application{

Stage window2;
BorderPane layout2;
Scene scene2;

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

@Override
public void start(Stage primaryStage) throws Exception {
    window2 = primaryStage;
    window2.setTitle("Stage 2");

    scene2 = new Scene(layout, 800,600);
    window2.show();
}
}

1 个答案:

答案 0 :(得分:0)

我写了这个控制器来跟踪不同的场景图并毫不费力地切换我的舞台内容。

也许你想看看FXML: http://docs.oracle.com/javafx/2/fxml_get_started/why_use_fxml.htm#CHDCHIBE

public class ScreenController {
    private HashMap<String, Pane> screenMap = new HashMap<>();
    private Scene main;

    public ScreenController(Scene main) {
        this.main = main;
    }

    protected void addScreen(String name, Pane pane){
         screenMap.put(name, pane);
    }

    protected void removeScreen(String name){
        screenMap.remove(name);
    }

    protected void activate(String name){
        main.setRoot( screenMap.get(name) );
    }
}

所以我可以写:

ScreenController screenController = new ScreenController(scene);
screenController.add("layout1", layout1 );
screenController.add("layout2", layout2 );
screenController.add("testSwitch", FXMLLoader.load(getClass().getResource( "TestSwitch.fxml" )));

button.setOnAction(e -> screenController.activate("layout2"));

这是全屏应用程序的解决方法,每次舞台切换场景时都会显示MacOS全屏转换。