Swing和延迟加载组件

时间:2010-08-25 19:45:46

标签: java swing lazy-loading

我使用Eclipse插件Visual Editor来构建Java Swing接口。因为我不是WYSIWYG(UI)编辑器生成的代码的忠实粉丝,所以当我注意到编辑器使用延迟加载实现所有元素时,我想优化它:

private JPanel getSomePanel ()
{
    if ( somePanel == null )
    {
        somePanel = new JPanel();
        // construct the panel
    }
    return somePanel;
}

我知道,如果不立即使用相关对象,则使用延迟加载来获得更好的性能。然而,对于大多数用户界面而言,这没有多大意义,因为例如窗口通常应该从一开始就显示其上的所有组件。在我的情况下也是如此,我有一个相当简单的清晰布局,在显示窗口时,所有组件都应该存在。

Visual Editor在根容器的构造函数中添加了一个initialize调用,在该构造函数中构造了根面板,并添加了所有其他元素(通过延迟加载)。所以实际上所有组件都是在构造根容器时创建的,只是嵌套在多个方法中。

在这种情况下,是否有任何延迟加载用途?我应该在哪些UI情况下使用延迟加载?当使用延迟加载时,我实际上甚至允许直接访问成员变量 - 或者我应该每次都调用getter吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

使用延迟加载时,每次访问成员变量时都应始终使用getter。这是延迟加载的基本部分。

但是,在您描述的这种情况下,没有理由使用延迟加载。我不得不怀疑Visual Editor的作者是否有一些懒惰加载的东西,他觉得它总是需要被使用,或者只是决定他想在工具中出于某种任意原因使用它。

在构建面板时,组件通常全部被加载,因为它们都是可见的,所以你是完全正确的UI。在某些情况下,面板的某些部分可能会根据面板上的其他选项出现和消失,并且可以想象在这些情况下可以使用延迟加载。然而,我的观点是,人们可能无论如何都会点击界面并使用所有不同的标签和选项,因此您不妨加载所有内容。

显然,当您谈论加载数据时会发生一些不同的事情。如果您在面板出现时隐藏了一个下拉列表,并且在加载时有很多信息,您可能不想加载下拉列表,直到它变得可见。我仍然认为没有理由不立即实例化下拉列表,即使它被隐藏了。

我不认为延迟加载是面板的标准行为。我无法提供Visual Editor选择以这种方式生成代码的原因。

答案 1 :(得分:3)

  

我不是代码WYSIWYG的忠实粉丝   (UI)编辑器生成

我也是。

  

实际上是否有任何懒惰用途   在这种情况下加载?

我不这么认为,组件的创建不会花时间,因此在显示GUI时应该可以看到所有组件。

对我来说,更重要的是数据。如果组件框和表等组件的数据来自数据库,您可能不想预先加载它。

相关问题