的Java Swing - 如何UI组件

问题描述:

我有两个UI组件分开如下:这里的Java Swing - 如何UI组件

class UIPanel extends JPanel{ ... } 

class MainPanel { Model m; 
    //instantiates UIPanel } 

问题是,在UIPanel类,我想补充一点,将使用模型来做出决定如何一个ActionListener处理用户操作。不幸的是,我决定拆分这两个类,并且我无法直接访问模型。一个显而易见的解决方案是简单地将UIPanel类粘贴到MainPanel中,但我想是否有办法保持分割。

你可以简单地给UIPanelModel参考:

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)。操纵模型的控制器会听到视图操纵。然后模型会发起一个事件,说它已经改变,视图会听。一旦收到通知,视图就会更新。

因此,它是控制器,而不是从用户界面监听用户事件,并决定如何处理它。

该模型可以触发多个视图。如果您希望多个控制器在同一模型上运行(每个视图一个)或者让控制器监听每个视图中的事件,则可以这样做。我个人会有一个控制器的一个视图。