4

私は周りを見回していて、少なくとも私には十分に明確ではない答えを1つだけ見つけました。

私はGUIを使用して非常に基本的なチャットアプリケーションを構築しており、GUIを接続のものから分離しました。次に、サーバークラスのGUIから1つのメソッドを呼び出す必要があり、その逆も同様です。しかし、私はそれを行う方法を完全には理解していません(「これ」でも)。コードの一部は次のようになります(これはserver_frameという名前のクラスです)。

textField.addActionListener(
            new ActionListener() {

                public void actionPerformed(ActionEvent arg0) {
                    try {
                        srv.sendData(arg0.getActionCommand());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    textField.setText("");
                }
            }
            );

これはserver_frameのコードであり、srvはsendDataメソッドを含む他のクラス(サーバー)のオブジェクトです。おそらく正しく定義していなかったので、誰かが定義できるといいのですが。

オブジェクトsrvが作成された反対側のクラスサーバーには、次のコードでserver_frameのJTextAreadisplayAreaを使用するメソッドが含まれています。

private void displayMessage(final String message){
    sf = new server_frame();
    SwingUtilities.invokeLater(new Runnable(){

        public void run(){
            sf.displayArea.append(message);
        }
    }
            );
}

さらに、sfはserver_frameで作成されたオブジェクトであり、おそらく誤って定義されています:)

うまくいけば、それは十分に明確でした。悲しいことに、検索を試みましたが、探していた結果が得られませんでした。さらに情報が必要な場合は、喜んで追加します。

読んでくれてありがとう、

Mr.P.

PS用語に問題があったとしても気にしないでください。私はまだJavaにまったく慣れておらず、修正を受け入れることができます。

4

2 に答える 2

3

一部のクラスは、これらのオブジェクト(GUIとサーバー)の両方を構築している必要があり、それぞれが他方を認識している必要があります。たとえば、メインクラスがであるとしServerApplicationます。わかりやすくするために、クラス名を大文字で始めるという標準のJava規則を使用します。

class ServerApplication {
    Server server;
    ServerFrame gui;

    public static void main(String []) {
        server = new Server(...);
        gui = new ServerFrame(server);
        server.setGui(gui);
    }
}

各クラスは、他のクラスへの参照も保存する必要があります。

class Server {
    ServerFrame gui;

    public void setGui(ServerFrame gui) {
        this.gui = gui;
    }

    ...
}

class ServerFrame extends JFrame {
    Server server;

    public ServerFrame(Server server) {
        this.server = server;
    }

    ...
}
于 2012-07-20T18:20:33.123 に答える
0

ClassName.this.methodName構文を探しているのではないかと思います。これらのアクションリスナーのこれは、作成した匿名クラスを参照します。上記の構文を使用した場合、匿名クラスを含むクラスを参照することになります。

または、クラスでプライベートフィールドを探している場合は、ClassName.this.privateFieldを実行します。

于 2012-07-20T18:10:34.347 に答える