在SWT中管理应用程序屏幕的最佳方法是什么?

时间:2010-04-20 07:23:04

标签: java eclipse swt desktop-application

我正在创建一个独立的SWT桌面应用程序,它有大约10个不同的屏幕(很少的向导,帮助,表单等)。屏幕上的某些元素根本不会改变(如标题,背景等),并且有一个工作区域会根据点击的内容而改变等。

管理应用程序屏幕的最佳方法是什么?我是否需要在启动时创建所有屏幕,然后根据点击的内容显示/隐藏它们?或者我是否需要动态创建这些屏幕?

另外,我找不到显示/隐藏Composite的方法,是否需要dispose然后重新创建?

最佳做法是什么?我是SWT在Eclipse之外开发的新手,所以任何帮助都会有所帮助。

1 个答案:

答案 0 :(得分:5)

决定是在前面创建屏幕还是在第一次需要显示时创建它们是需要在每个应用程序的基础上做出的决定。如果很可能所有屏幕都需要在特定的应用程序运行中使用并且屏幕数量很少(10个屏幕相对较低),那么您可能希望在应用程序启动时创建它们,因此UI是一旦应用程序加载,就会变得更快。

如果你使用绑定,那么你可能需要提出一个处置策略(即使你只处理绑定),所以你没有太多的事件飞来飞去。

Control具有setVisible(boolean)方法(并且Composite继承自Control),您可以使用它来显示和隐藏组件。请注意,这只会阻止复合显示在屏幕上,布局管理器仍会为其分配空白区域。许多SWT布局都有一种方法可以从布局中排除控件,从而消除空白区域。例如,如果您使用的是GridLayout,则在隐藏该控件时,可以将GridData对象上的exclude变量设置为true。

另一种选择是使用StackLayout。这使您可以将一堆复合材料堆叠在一起,然后选择哪一个在顶部。如果你有静态区域加上你所描述的工作区域,这可能非常适合你。我会将标题,页脚和带有StackLayout的空复合放在类文件中。然后,我会将每个将在工作区中显示的屏幕放在他们自己的类中。您可以让这些屏幕类扩展Composite,然后在构造函数中设置它们,也可以使用工厂方法来设置屏幕。任何一种都是一种普遍且可接受的做法,归结为品味问题。