从构造函数构建GUI。 [设计决定]

时间:2012-05-28 23:33:28

标签: java user-interface

我刚刚完成了我们的考试项目,当回顾我编码的内容时,我觉得我做得很好。虽然,东西显然可以总是更好。但也许那就是我。

我负责编写GUI,并将其与应用程序逻辑相结合。在制作GUI时,我决定为每个窗口(例如LoginWnd.java)创建一个类文件,并在构造函数中实际构建GUI。我会初衷所有内容并在此构造函数中设置所有数据。

然后,为了浏览应用程序,我会在jbutton上设置actionlisteners。例如,在SearchWnd中,点击“搜索”jbutton将创建一个具有一些指定参数的ResultWnd的新对象。

现在我有点疑惑:这个设计决定有什么不好吗?有没有我应该知道的设计范例?

感谢。

2 个答案:

答案 0 :(得分:4)

你的方法总体上听起来很好 - 只要它有效,你就实现了主要目标!所以我在这里的评论更多的是关于微调/更广泛的设计方面。

在构造函数提供中进行GUI构建没有任何根本性的错误,GUI在程序执行期间不会随后更改。这里的理由是,施工人员应保留“一次性”建筑活动。因此,对于具有预定布局的对话框等,它可能很好。

如果你有一个更动态的GUI,其中组件经常在程序执行过程中被添加和删除,那么我强烈建议将它移到构造函数之外的一组方法中,以便可以独立于对象构造调用它们。如果需要进行初始设置,构造函数本身仍然可以调用这些方法,但随后您可以稍后调用这些方法来添加新组件,刷新布局等。

好消息是,如果你弄错的话,这个东西并不难重构 - 如果需要的话,将构造函数中的设置代码拖出到单独的方法中通常是微不足道的。

需要注意的另一件事是经常重复的口头禅“更喜欢构成继承”。也就是说,如果您可以通过组装现有组件来使GUI工作,而不是继承和覆盖您的设计,从长远来看可能更好/更容易维护。例如,我认为我没有将JFrame子类化 - 只是在其中添加包含所有特定于应用程序的组件的JPanel几乎总是更清晰。

最后,要谨慎地将GUI组件与应用程序逻辑紧密耦合。 Swing实际上可以很好地将您的数据模型与表示代码分开(例如{ {3}})。值得研究和理解这种方法。关键是你应该通常以一种与应用程序无关的方式构建GUI组件,但是通过将它们连接到正确的数据模型和事件处理程序等来为它们提供特定于应用程序的行为。

答案 1 :(得分:0)

我也在构造函数中初始化我的GUI,所以它不会坏:)但是当它变得太长时,我将部分代码提取到单独的GUI组件中。