Java Swing - 如何分离UI组件

时间:2012-08-07 09:53:38

标签: java swing user-interface

我有两个UI组件如下:

class UIPanel extends JPanel{ ... }

class MainPanel { Model m;
    //instantiates UIPanel }

这里的问题是在UIPanel类中我想添加一个ActionListener,它将使用Model来决定如何处理用户操作。不幸的是我决定拆分这两个类,我无法直接访问Model。一个显而易见的解决方案是简单地将UIPanel类放在MainPanel中,但我在想是否有办法保持分裂。

2 个答案:

答案 0 :(得分:3)

您可以简单地为UIPanel提供Model

class UIPanel {
    UIPanel(Model m) {
         m.addActionListener(listener);
    }
}

class MainPanel {
    ...
    MainPanel() {
        ...
        UIPanel uiPanel = new UIPanel(m); // Constructor, a separate setter would be possible also
        ...
     }
}

这显然是一个非常紧密的耦合。也许MainPanel根本不需要Model的引用?

答案 1 :(得分:0)

听起来你需要添加一个控制器类(使其更像MVC)。控制器将听到视图操作,操纵模型。然后该模型将触发一个事件,表明它已经改变并且视图将会收听。收到通知后,视图将会更新。

因此,控制器不是从UI中侦听用户事件,而是决定如何处理它。

然后,模型可以触发多个视图。如果您希望有多个控制器作用于同一模型(每个视图一个),或者让控制器监听每个视图中的事件,则可以。就个人而言,我会为一个视图设置一个控制器。