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

标签 java javafx

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

最佳答案

听起来您在这里所需要的只是延迟实例化您需要的每个部分,并保留对它的引用。这个问题很笼统,所以很难给出具体的例子,但基本思想如下:

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();
    }
}

关于java - 将组件保留在后台以便稍后在 javafx 中重用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48503165/

相关文章:

java - 在 JavaFX 中显示复杂的印度孟加拉语字体

java - 在对 JSP 隐式对象的属性进行强制转换时,我应该添加 try/catch around 吗?

java - 选择下拉菜单时刷新数据表

JavaFX - 多个语句的 TextField 输入验证

JavaFX 场景生成器 : having a root node different from AnchorPane

javafx - 如何将节点转换为另一个对象

java - 使用 showMessageDialog 显示数组并返回选定的值

java - ForkJoinPool,如何打印出每个工作线程的ID?

java - 将java项目部署到谷歌计算引擎

debugging - 如何使用 ScenicView 检查子窗口(ContextMenus、PopupControls 等)