gpt4 book ai didi

Java 类与 JFrame 之间的通信 JDialog

转载 作者:行者123 更新时间:2023-12-01 16:05:38 24 4
gpt4 key购买 nike

我写了一个独立的 Connect 4 游戏。

接下来我希望能够通过网络播放它,并且还具有聊天功能。

连接4 GUI(JFrame)持有->连接4游戏模型

我想实现拥有网络API的connect 4网络GUI(JDialog)(这里用户可以选择充当服务器或客户端)。 (服务器仅提供单个连接)

最后是用于交换消息的聊天 GUI (JDialog)。

我的问题是如何实现类间/GUI 通信?当收到网络消息时,它应该传递到正确的接收者(游戏/聊天),并且从聊天/游戏发送的消息也应该传递到远程计算机。

我研究过内部类,但被告知在单个类中实现这么多内容是一个坏主意,而且我也不太喜欢这个想法。

我用 C# 编写了另一个游戏战舰,它使用委托(delegate)来完成此任务,但遗憾的是我得知委托(delegate)在 Java 中不可用。

我是一名初学者,目前正在探索各种选择,因此我愿意接受您的指导。

谢谢。

最佳答案

这里有两个问题。

首先,您必须记住,所有 GUI 操作都必须从 Swing 的事件调度线程 (EDT) 发出。因此,如果另一个线程(例如监听网络消息的线程)想要更新 GUI,则必须使用 SwingUtilities.invokeLater,如下所示:

 // Network thread
final Message msg = getMessage();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// This code will be executed on the EDT
// it can access the msg variable because it is final
}
});

第二点是协调 GUI 对象和网络对象。我认为最好的方法是创建两个Mediator类,它们将从网络对象接收通知并将它们“翻译”为GUI对象上的适当操作(反之亦然)。这些调解器还将确保在 EDT 上分派(dispatch) GUI 事件,如上所述。

关于Java 类与 JFrame 之间的通信 JDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2699816/

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