在我的编辑器中,我有一个LayersManager和LayersView类。 LayersManager类保存用户当前正在使用的所有图层(请考虑使用Photoshop图层)。 LayersView是一个JPanel,列出了LayersManager中包含的图层。
我想做的是,每当从LayersManager中调用add(Layer)或remove(Layer)方法时,通过从JPanel的容器中添加或删除LayerComponent来更新LayersView JPanel。
换句话说,我想要的是一个反向的ChangeListener,其中无论何时在LayersManager中进行更改,都会自动联系LayersView,从其容器中添加或删除LayerComponent并使自身失效。
所以我的问题是:是否有内置的侦听器标准来执行此操作?听众是正确的方法吗?还是应该只在LayersManager中包含对LayersView的引用并手动调用所需的方法(我怀疑这是不好的设计)?我想不出一种实现我自己的侦听器的好方法(明智的设计)。
任何帮助表示赞赏!
最佳答案
您可以使用Observer pattern。 Java以Observable和Observer类的形式对这种模式提供了内置支持。
基本上,您的LayersManager
将扩展Observable
,而您的LayersView
将实现Observer
。然后,您将在addObserver
上调用LayersManager
并传递LayersView
。
一旦到位,只要发生更改,您想在LayersManager
上通知以下内容,就可以在LayersView
上调用以下方法:
layersManager.setChanged();
layersManager.notifyObservers();
如果您希望
notifyObservers
侦听器接收某些数据,则Observer
方法可以将对象作为参数。调用notifyObservers
后,您的LayersView
将调用update
方法。关于java - 编辑器设计:更改后更新Swing组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14374853/