将组件保留在后台,以便稍后在javafx中重用它们

时间:2018-01-29 14:07:57

标签: java javafx

在我的应用程序中,我有一些不同功能所需的组件 现在,每当我打开一个需要其中一个组件的功能时,所有组件都从头开始构建 这是不必要的,所以我想改变这一点,但我不知道如何。
我不再需要的组件应该隐藏在后面,当它们再次需要时,它们应该放在前面。
这应该会提高性能,因为不需要重建组件(或者至少我希望如此)。
我希望有人知道如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

听起来你需要的就是懒得实例化你需要的每件作品,并保留对它的引用。问题非常笼统,所以很难给出一个具体的例子,但基本思想看起来像这样:

public class SceneController {

    private Parent view1 ;
    private Parent view2 ;
    // etc... You could perhaps store these in a map, or other data structure if needed

    public Parent getView1() {
        if (view1 == null) {
            view1 = createView1();
        }
        return view1 ;
    }

    public Parent getView2() {
        if (view2 == null) {
            view2 = createView2();
        }
        return view2 ;
    }

    private Parent createView1() {
        // Build first view. (Could be done by loading FXML, etc.)
    }

    private Parent createView2() {
        // Build second view...
    }
}

然后你可以按照

的方式做事
public class MyApp extends Application {

    @Override
    public void start(Stage primaryStage) {
        SceneController sceneController = new SceneController();
        BorderPane root = new BorderPane();
        Button showView1 = new Button("View 1");
        Button showView2 = new Button("View 2");
        ButtonBar buttonBar = new ButtonBar();
        buttonBar.getButtons().addAll(showView1, showView2);
        root.setTop(buttonBar);

        showView1.setOnAction(e -> root.setCenter(sceneController.getView1()));  
        showView2.setOnAction(e -> root.setCenter(sceneController.getView2()));

        Scene scene = new Scene(root, 600, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}