0

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

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

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

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

任何帮助表示赞赏!

4

1 回答 1

1

您可以使用观察者模式Java 以ObservableObserver类的形式内置了对这种模式的支持。

基本上,您LayersManager将扩展Observable并且您LayersView将实施Observer. 然后你会调用addObserverLayersManager传入你的LayersView.

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

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

如果您希望侦听器接收一些数据,该notifyObservers方法可以将对象作为参数。Observer一旦notifyObservers被调用,您LayersViewupdate调用该方法。

于 2013-01-17T08:36:11.647 回答