4

我一直在环顾四周,我只找到了一个不够清楚的答案,至少对我来说是这样。

我正在使用 GUI 构建一个非常基本的聊天应用程序,并且我已将 GUI 与连接内容分开。现在我需要从服务器类中的 GUI 调用一种方法,反之亦然。但我不太明白该怎么做(即使是“this”)。下面是部分代码的样子(这是一个名为 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 中的 JTextArea displayArea 的方法:

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

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

又一次 sf 是一个由 server_frame 组成的对象,而且可能再次定义错误:)

希望这足够清楚,遗憾的是我尝试了搜索,但它没有给我我正在寻找的结果,如果您需要更多信息,我很乐意添加它!

谢谢阅读,

先生

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 语法。那些动作监听器中的 this 指的是您创建的匿名类。如果您使用上述语法,您将引用包含匿名类的类。

或者,如果您正在寻找班级中的私有字段,您可以使用 ClassName.this.privateField

于 2012-07-20T18:10:34.347 回答