java - 编辑器设计: Update Swing Components After Change

标签 java swing

在我的编辑器中,我有一个 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/

相关文章:

java - 通过自定义表模型将行添加到 jtable

java - Spring /处女座 - java swing : JDialog starts behind other windows

Java:如何通过一次 SSL 握手发出多个 HTTPS 请求?

java - 我们什么时候应该在 Java 中使用接口(interface)或抽象类?

JavaFX PixelWriter 性能低下

java - 有没有办法将 MouseListener 添加到 Graphic 对象?

java - setFocusable() 和 setFocusableWindowState() 有什么区别?

java - 使用 GridBagLayout JTables 和 JScrollPane 不起作用

java - 消息: Missing PDF in PrimeFaces Extensions DocumentViewer

java - nscala-time 和 Java 8 数据时间之间的 Scala 日期时间