在我的编辑器中,我有一个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以ObservableObserver类的形式对这种模式提供了内置支持。

基本上,您的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/

10-10 06:31