gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:55:06 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com