- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的编辑器中,我有一个 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
。然后,您可以在 LayersManager
上调用 addObserver
并传入您的 LayersView
。
完成后,只要发生想要通知 LayersView
的更改,您就可以在 LayersManager
上调用以下方法:
layersManager.setChanged();
layersManager.notifyObservers();
如果您希望 Observer
监听器接收一些数据,则 notifyObservers
方法可以将对象作为参数。调用 notifyObservers
后,您的 LayersView
将调用 update
方法。
关于java - 编辑器设计: Update Swing Components After Change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14374853/
我是一名优秀的程序员,十分优秀!