私が取り組んでいるクライアント/サーバー 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;
}
JInternalFrames を MyCommandReciever にどんどん渡し続けたくありません。
このようなことをするのは理にかなっていますか??
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 明らかに、私はこの最後のアイデアに頭を悩ませました.