【问题标题】:Java Swing architecture problem?Java Swing 架构问题?
【发布时间】:2011-01-09 02:42:39
【问题描述】:

到目前为止,我已经开发了简单的 swing 应用程序,因此无需将 GUI 代码分解为 diff。类,但由于这个应用程序将非常大,我决定将代码分解为 diff。类,以使代码更易于管理。

但在继续之前,我心中有一些疑问:

图形用户界面简介

它将有一个主JFrame(MainFrame)。在那上面设置了一个 JPanel(MainJPanel),它的布局是 CardLayout。它将包含 25 张卡片(每张卡片都是 JPanel 的形式,其中包含自己的摆动组件)。

第一季度。我决定制作 25 个课程(每个课程对应一张 JPanel 卡)。这是正确的方法吗?

第二季度。如果上述答案是正确的,那么我该如何编写这些卡片(25 张卡片)上的按钮的 xxxxActionPerformed() 方法的代码,因为这些方法需要访问 MainJPanel 的对象

例如

public void buttonActionPerformed(ActionEvent evt) {
    java.awt.CardLayout c = (java.awt.CardLayout) mainJPanel.getLayout();
    c.show(mainJPanel, "card1");  // card1 is this card
    mainJPanel.updateUI();
}

我在 Google 上搜索了 swing 示例,但几乎所有示例都显示了 diff 的使用。摆动组件。您能否也请给我一个链接,显示一些包含差异中的 GUI 代码的摇摆示例。类。

【问题讨论】:

    标签: java user-interface swing


    【解决方案1】:

    Q1) 这听起来像是很多课程。虽然每个类都可能具有不同的功能,但我发现您更有可能将其中一些组合成更常见的类。例如,您可以简单地使用 ColorCard 而不是 YellowCard 和 BlueCard,其中颜色是一个参数。

    Q2) 模型视图展示器 (MVP) 和模型视图控制器 (MVC) 是两种(或一种,取决于您的视图)常见的设计模式,它们有助于设计 GUI,以便每个人都拥有他们需要的数据。

    更具体地说,您可能不需要所有卡片都具有对父面板的引用。例如,如果您有一个允许用户订购汉堡的 BurgerPanel 和一个显示已订购多少汉堡的 StatusPanel,您可以在它们之间进行如下通信...

    创建一个 StoreStatus 对象并将其传递给 BurgerPanel 和 StatusPanel。当用户订购带有汉堡面板的汉堡时,它会更新商店状态。商店状态通过观察者模式通知 StatusPanel 这个更新,然后 StatusPanel 反映变化。

    更新:关于您的具体示例,您可以对父类进行某种引用,也可以通过观察者模式通知它更新。 (观察者模式的优点是对父类的任何更改都不会在子类中产生更改。)

    【讨论】:

      【解决方案2】:

      我会说你为每张卡片创建一个类是正确的。这是拆分代码的合乎逻辑的方式。

      如果您需要引用 MainJPanel,则只需将其传递给每个卡片类的构造函数并保留对它的引用。

      【讨论】:

      • 不确定为什么它会被否决,因为每张卡的类肯定可以工作。可能人们对传递 MainJPanel 有反应,因为面板之间的通信应该通过使用侦听器并让 MainJPanel 作为控制器来完成。
      • @willcodejavaforfood 我认为你是对的,但我想人们更容易投反对票,而不必像你一样留下一些建设性的批评。
      猜你喜欢
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 2016-08-26
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多