编辑器设计:更改后更新Swing组件

时间:2013-01-17 08:26:52

标签: java swing

在我的编辑器中,我有一个 LayersManager 和一个 LayersView 类。 LayersManager类包含用户当前使用的所有图层(想想Photoshop图层)。 LayersView是一个JPanel,列出了LayersManager中包含的图层。

我想做的是每当从LayersManager调用add(Layer)或remove(Layer)方法时,通过从JPanel的容器中添加或删除LayerComponent来更新LayersView JPanel。

换句话说,我想要的是反向ChangeListener,无论何时在LayersManager中进行更改,都会自动联系LayersView,从其容器中添加或删除LayerComponent并使其自身无效。

所以我的问题是:是否有标准的内置监听器来执行此操作?听众是否是正确的选择?或者我应该只在LayersManager中包含对LayersView的引用并手动调用所需的方法(我怀疑这是糟糕的设计)?我想不出一个很好的(设计明智的)实现我自己的听众的方式。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

您可以使用Observer pattern。 Java以ObservableObserver类的形式内置了对此模式的支持。

基本上,您的LayersManager会延长Observable而您的LayersView会实施Observer。然后,您可以致电addObserver上的LayersManager并传递LayersView

一旦到位,只要发生您要通知LayersManager的更改,就可以在LayersView上调用以下方法:

layersManager.setChanged();
layersManager.notifyObservers();

如果您希望notifyObservers侦听器接收某些数据,Observer方法可以将对象作为参数。调用notifyObservers后,您的LayersView将调用update方法。