的Java Swing - 如何UI组件
问题描述:
我有两个UI组件分开如下:这里的Java Swing - 如何UI组件
class UIPanel extends JPanel{ ... }
class MainPanel { Model m;
//instantiates UIPanel }
问题是,在UIPanel类,我想补充一点,将使用模型来做出决定如何一个ActionListener处理用户操作。不幸的是,我决定拆分这两个类,并且我无法直接访问模型。一个显而易见的解决方案是简单地将UIPanel类粘贴到MainPanel中,但我想是否有办法保持分割。
答
你可以简单地给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
?
答
听起来像你需要添加一个控制器类(使其更像MVC)。操纵模型的控制器会听到视图操纵。然后模型会发起一个事件,说它已经改变,视图会听。一旦收到通知,视图就会更新。
因此,它是控制器,而不是从用户界面监听用户事件,并决定如何处理它。
该模型可以触发多个视图。如果您希望多个控制器在同一模型上运行(每个视图一个)或者让控制器监听每个视图中的事件,则可以这样做。我个人会有一个控制器的一个视图。