是否可以在单独的类中定义场景?

时间:2018-08-14 13:41:12

标签: java javafx

这可能以前曾被问过,但我找不到答案。我正在开发一个JavaFX应用程序,其中包含许多场景和许多动画。目前,我在start()函数内部以及扩展Application的主类中定义了不同的Animationtimer和不同的Scene。但是,代码变得非常混乱且冗长。

有没有一种方法可以在单独的Java类中定义所有这些内容,然后简单地执行类似primaryStage.setScene(MyScene.getScene)的操作-MyScene是具有所有场景代码的Java类。

类似这样的东西:

public class TestScene {

    private Group root = new Group();
    Scene test = new Scene(root);
    Button button = new Button("test");
    root.getChildren.add(button);

}

实际上是将代码作为一个场景,您可以将其导入并设置在primaryStage上。

编辑:我不知道为什么这对我来说如此困难,正如Bertijn所说,我显然只需要使用构造器即可。无论出于什么原因,我都忘记了这一点,因此显然可以在某种函数之外执行root.getChildren.add(button)。

如果有人为此感到困扰,这是超级简单的解决方案:

包含我们场景的类:

import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.paint.Color;

public class OurScene {
    public Scene getScene() {
        Group root = new Group();
        Scene scene = new Scene(root, Color.GREEN);
        Button button = new Button("Hello world!");
        root.getChildren().add(button);
        return scene;
    }
}

然后将其添加到primaryStage:

import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        OurScene ourScene = new OurScene();
        primaryStage.setScene(ourScene.getScene());
        primaryStage.show();
    }
}

1 个答案:

答案 0 :(得分:0)

尝试创建一个名为Scenes的类。在构造函数中,创建所有场景,如果需要,可以给它们提供一个ID。在您的主类中,只需创建此类Scenes scenes = new Scenes();的实例。场景被创建。然后,您可以通过创建getScene(String id)方法来访问它们。

希望我能正确理解您的问题,如果仍然无法解决问题,请随时与我联系!