gpt4 book ai didi

java - 将 GUI 引用传递给编辑它们的其他类的最佳方法

转载 作者:行者123 更新时间:2023-12-02 00:24:15 25 4
gpt4 key购买 nike

我正在开发一个客户端/服务器 MMORPG,我想正确地做事(尽管这是不可能的)。我的问题是:将对我的 GUI 项目(JInternalFrame、JPanels 等)的引用传递给监听来自服务器的命令/回复的类的最佳方法是什么。现在这就是我正在做的事情,它很快就会变得相当大。

MyCommandReciever(DataInputStream commandIn, DefaultListModel modelUserList, JInternalFrame skillsFrame, Container skillsPanelHeader, Container skillsPanelContent, JInternalFrame characterFrame){
this.commandIn = commandIn;
this.modelUserList = modelUserList;
this.skillsFrame = skillsFrame;
this.skillsPanelHeader = skillsPanelHeader;
this.skillsPanelContent = skillsPanelContent;
this.characterFrame = characterFrame;
}

我不想继续向 MyCommandReciever 传递越来越多的 JInternalFrame。

这样做有意义吗?

Component[] c = panel.getComponents();
for(int i = 0; i < c.length; i++) {
System.out.println(c[i].getClass().getSimpleName());
}

或者有没有一种方法可以让我从主类中创建主类的实例(包括我的 GUI),并将其传递给 MyCommandReciever,以便它可以访问所有内容(可能像这样):

MyCommandReciever(DataInputStream commandIn, DefaultListModel modelUserList, MyClient m){

如果最后一种方法是可行的方法(我希望不是,我是否需要从创建它的实例的类传递它(Character.java 创建 MyClient.java 的实例),到它自己(MyClient.java),然后将它从MyClient.java传递到MyCommandReciever.java?

抱歉,如果最后一个问题太令人困惑......让我分解一下:

Character.java 内部:

if (playSuccess.contains("true")){
z++; //to turn off the commandIn functionality in Character screen when MyClient is running
frame.dispose();
new MyClient(accountName, playWho, commandIn, messageIn, commandOut, messageOut, sM, sC);

MyClient.java 内部:

commandReciever = new MyCommandReciever(commandIn, modelUserList, skillsFrame, skillsPanelHeader, skillsPanelContent, characterFrame);

所以在character.java中我必须创建MyClient的实例(并分配给变量),但同时将该分配的变量传递给MyClient。 (现在我正在输入这个,这似乎根本不可能)。

请指导我:D 显然我全神贯注于最后一个想法。

最佳答案

您可以做的是使用称为“观察者”或“事件源”的模式:

  1. 定义命令接收器和主类之间的接口(interface),以及命令接收器在发生有趣的事情时应调用的方法。
  2. (显然,命令接收器应该保存对实现此接口(interface)的对象的引用,以便能够发送事件。)
  3. 在主类中实现接口(interface)(通过主类本身或通过嵌套类),并通过更新接口(interface)来响应来自命令接收器的事件。将实现传递给命令接收者。

这样,命令接收器和用户界面就完全解耦了,如果在某个时候您决定使用 JInternalFrame 之外的其他内容来显示数据,则无需在数百处更改代码.

您还可以考虑使用 MVC 或其众多兄弟之一..

关于java - 将 GUI 引用传递给编辑它们的其他类的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10328662/

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