Java Swing架构问题?

Yat*_*oel 0 java user-interface swing

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

但在继续之前,我在脑海中有一些疑问如下:

GUI的简要说明

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

Q1.我决定制作25个课程(每个课程为一个JPanel卡片).这是正确的方法吗?

Q2.如果上面的答案是正确的,那么如何编写那些卡上的按钮xxxxActionPerformed()方法的代码(25张卡),因为这些方法需要访问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();
}
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了摇摆的例子,但几乎所有这些都展示了diff的用法.摆动组件.你还可以给我一个链接,它显示一些在diff中包含GUI代码的swing示例.类.

Pac*_*ace 10

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

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

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

创建StoreStatus对象并将其传递给BurgerPanel和StatusPanel.当用户使用汉堡面板订购汉堡时,它会更新商店状态.存储状态通过观察者模式通知StatusPanel此更新,然后StatusPanel反映更改.

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