繁体   English   中英

Javafx 使用不同窗格切换场景

[英]Javafx switching scenes using different panes

我有 class SceneLibrary,我想用它来切换场景。 当我运行应用程序时,我在 PaneOne private SceneLibrary sceneLibrary = new SceneLibrary(); 和 <init> 在 SceneLirary 的错误private Scene sceneOne = new Scene(new PaneOne(),300,500); . 我不能使用 static 场景。

public class SceneLibrary {
    private Stage primaryStage;
    private Scene sceneOne = new Scene(new PaneOne(),300,500);
    private Scene sceneTwo = new Scene(new PaneTwo(),400,500);

    public void setPrimaryStage(Stage primaryStage){
        this.primaryStage = primaryStage;
    }

    public void switchToOne(){
        primaryStage.setScene(sceneOne);
    }

    public void switchToTwo(){
        primaryStage.setScene(sceneTwo);
    }
}

我的 PaneOne class:

public class PaneOne extends AnchorPane {
    private SceneLibrary sceneLibrary = new SceneLibrary();
    public PaneOne() {
        Button button = new Button();
        this.getChildren().add(button);

        button.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent event) {
                sceneLibrary.switchToTwo();
            }
        });
    }
}

我的主要 class:

public class Main extends Application {
    private SceneLibrary sceneLibrary = new SceneLibrary();
    @Override
    public void start(Stage primaryStage) throws Exception{
        AnchorPane root = new PaneOne();
        primaryStage.setTitle("Hello World");
        sceneLibrary.setPrimaryStage(primaryStage);
        primaryStage.setScene(new Scene(root, 300, 500));
        primaryStage.show();
    }

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

分享一个sceneLibrary的实例:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        SceneLibrary sceneLibrary = new SceneLibrary();
        sceneLibrary.setPrimaryStage(primaryStage);
        sceneLibrary.switchToOne();//set scene one to the stage 
        primaryStage.show();
    }

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

class PaneOne extends AnchorPane {

    public PaneOne(SceneLibrary sceneLibrary) {
        Button button = new Button("Switch To Scene 2");
        this.getChildren().add(button);
        button.setOnAction(event -> sceneLibrary.switchToTwo());
    }
}

class PaneTwo extends AnchorPane {

    public PaneTwo(SceneLibrary sceneLibrary) {
        Button button = new Button("Switch To Scene 1");
        this.getChildren().add(button);
        button.setOnAction(event -> sceneLibrary.switchToOne());
    }
}

class SceneLibrary {

    private Stage primaryStage;
    private final Scene sceneOne = new Scene(new PaneOne(this),300,500);
    private final Scene sceneTwo = new Scene(new PaneTwo(this),400,500);

    public void setPrimaryStage(Stage primaryStage){
        this.primaryStage = primaryStage;
    }

    public void switchToOne(){
        primaryStage.setScene(sceneOne);
    }

    public void switchToTwo(){
        primaryStage.setScene(sceneTwo);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM