Swing和延迟加载组件

我使用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?

谢谢!

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

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

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

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

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

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

我也是。

在这种情况下,是否有任何延迟加载的用途?

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

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