JavaFX - 从另一个类事件中打开一个场景

时间:2016-04-05 11:51:11

标签: java oop javafx

我有一个 Main.java ,其中包含我所有的JavaFX代码,整个程序的多个场景都存储在这里,并且它变得非常难以阅读。< / p>

我想尝试将每个&#34;屏幕&#34;(Scene)存储在一个单独的.java类中,以便我可以更轻松地找到并进行更改等.I&#39 ;我是JavaFX的新手,还在学习OOP。

在下面的示例中,我想在Scene点击事件中打开一个新的Button(来自单独的.java类)。我目前在单班上工作。但是不知道如何在另一个文件中处理这个问题。我还需要将两个数组列表传递到单独的类中以填充表。

以下是我修修补补的样本。

Button

goToNextScene = new Button("View next scene");
goToNextScene.setOnAction(e -> window.setScene(AnotherClassA.sceneLayout, aList, bList));
// another try:
goToNextScene.setOnAction(e -> AnotherClassA.sceneLayout(aList, bList));

新类:(只是一个屏幕上有更多按钮,很快就有两个表来显示传递的数组列表)

public class AnotherClassA {

    private BorderPane bP;
    private HBox hBtnMenu;
    private Button hMenuBtnA, hMenuBtnB, returnBtn;
    public Scene sceneLayout;

    public Scene sceneLayout(ArrayList aList, ArrayList bList) {

       // array lists not used yet, but will come

        hBtnMenu = new HBox();
        hBtnMenu.setSpacing(10);
        hBtnMenu.setPadding(new Insets(10,10,10,10));

       hMenuBtnA = new Button("Btn A");
       //hMenuBtnA.setOnAction(e -> window.setScene(AnotherClassA.sceneA));

       hMenuBtnB = new Button("Btn B");
       //hMenuBtnB.setOnAction(e -> window.setScene(AnotherClassB.sceneB));

       returnBtn = new Button("Return to Home");
       //returnBtn.setOnAction(e -> window.setScene(Main.splashScene));

       hBtnMenu.getChildren().addAll(hMenuBtnA, hMenuBtnB, returnBtn);

       bP = new BorderPane();
       bP.setTop(hBtnMenu);

       animalSceneLayout = new Scene(bP, 1200, 760);

       return asceneLayout;
    }
}

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用所有类扩展Scene,执行public class SceneA extends Scene之类的操作并创建类似

的构造函数
public SceneA(Parent root, ArrayList a, ArrayList b) { super(root); } 

然后:

goToNextScene.setOnAction(e -> window.setScene(new SceneA(new AnchorPane(), aList, bList));