在我的编辑器中,我有一个 LayersManager 和一个 LayersView 类。 LayersManager类包含用户当前使用的所有图层(想想Photoshop图层)。 LayersView是一个JPanel,列出了LayersManager中包含的图层。
我想做的是每当从LayersManager调用add(Layer)或remove(Layer)方法时,通过从JPanel的容器中添加或删除LayerComponent来更新LayersView JPanel。
换句话说,我想要的是反向ChangeListener,无论何时在LayersManager中进行更改,都会自动联系LayersView,从其容器中添加或删除LayerComponent并使其自身无效。
所以我的问题是:是否有标准的内置监听器来执行此操作?听众是否是正确的选择?或者我应该只在LayersManager中包含对LayersView的引用并手动调用所需的方法(我怀疑这是糟糕的设计)?我想不出一个很好的(设计明智的)实现我自己的听众的方式。
任何帮助表示赞赏!
答案 0 :(得分:1)
您可以使用Observer pattern。 Java以Observable和Observer类的形式内置了对此模式的支持。
基本上,您的LayersManager
会延长Observable
而您的LayersView
会实施Observer
。然后,您可以致电addObserver
上的LayersManager
并传递LayersView
。
一旦到位,只要发生您要通知LayersManager
的更改,就可以在LayersView
上调用以下方法:
layersManager.setChanged();
layersManager.notifyObservers();
如果您希望notifyObservers
侦听器接收某些数据,Observer
方法可以将对象作为参数。调用notifyObservers
后,您的LayersView
将调用update
方法。