【问题标题】:Building the GUI from the constructor. [Design Decision]从构造函数构建 GUI。 [设计决定]
【发布时间】:2012-05-28 23:33:27
【问题描述】:

我即将完成我们的考试项目,当回顾我的编码时,我觉得我做得很好。不过,显然情况总是会好很多。但也许这只是我。

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

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

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

谢谢。

【问题讨论】:

    标签: java user-interface


    【解决方案1】:

    您的方法总体上听起来不错 - 只要它有效,您就已经实现了主要目标!所以我这里的 cmets 更多的是关于微调/更广泛的设计方面。

    在构造函数中进行 GUI 构造基本上没有错提供在程序执行期间 GUI 不会随后发生变化。这里的基本原理是,应为“一次性”建设活动保留建设者。因此,对于具有预先确定的布局的对话框等可能没问题。

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

    好消息是,如果你弄错了这些东西并不难重构 - 如果需要,稍后将设置代码从构造函数中提取到单独的方法中通常是微不足道的。

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

    最后,小心不要将您的 GUI 组件与应用程序逻辑耦合得太紧密。 Swing 实际上在鼓励您将数据模型与表示代码分离方面做得很好(例如,使用 @ 987654321@)。值得研究和理解这种方法。关键是您应该通常以与应用程序完全无关的方式构建 GUI 组件,但通过将它们连接到正确的数据模型和事件处理程序等来赋予它们特定于应用程序的行为。

    【讨论】:

    • 谢谢伙计。有很多东西要吸收,我不太明白你刚才说的那么多,所以还有很多东西要研究。但总的来说,这似乎是合法的。 :)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多