Java Swing - 将事件从子级传递到父级,而不将父级存储在子级中

Java Swing - Passing an Event from child to parent without storing parent in child

提问人:devor110 提问时间:5/2/2022 更新时间:5/2/2022 访问量:38

问:

我正在用 Java Swing 制作一个游戏,我遇到了一个问题,我需要向我的 UI 类(包含一个实例)发出信号,表明玩家已经升级并且需要显示适当的 UI。MainWindowGameLogic

正如我上面提到的,MainWindow 包含一个实例,顾名思义,它负责更新和维护游戏。当玩家升级时,我想调用一个可以处理的事件。我怎样才能做到这一点?GameLogicMainWindow

我想避免存储MainWindow实例的引用,因为当我使用Gson反序列化保存时,这可能会导致问题。我尝试简单地扩展 ActionEvent,但我认为这不是一个正确的路径,因为我需要在 as 中调用 'sconstructor,但需要一个非 null,它不能是因为它正在构造,所以尚不可用,但没有其他实例在那里使用是有意义的。GameLogicGameLogicActionEventGameLogicsuperActionEventsourceGameLogicthisObject

我想到的另一种方法是只有一个 within 的实例,但我如何在不存储它的引用的情况下设置它的 actionListener?ActionEventGameLogicMainWindow

在这一点上,我意识到这可能已经做了很多,所以最好求助于久经考验的解决方案,所以我在这里。我将不胜感激一般建议或指向探索和解决/解释此特定问题的网站的链接。

Java Swing 事件

评论

0赞 g00se 5/2/2022
正如我上面提到的,MainWindow 包含一个 GameLogic 实例那么,当您创建该实例时,为什么不将其添加为一个呢?thisActionListener
0赞 devor110 5/2/2022
我首先需要成为一个,不是吗?GameLogicActionEvent
0赞 g00se 5/2/2022
好吧,不,您需要添加成为导致事件的任何事件的侦听器。假设它是“fooButton”:thisGameLogicgameLogic.getFooButton().addActionListener(this);
0赞 devor110 5/2/2022
这是玩家杀死一个敌人,使他们超过上限以获得下一关,所以不是基于按钮或输入的event
0赞 g00se 5/2/2022
好的,但不是很重要。重要的是模式。 \ 或自定义事件ObserverObservable

答: 暂无答案