在Swing应用程序中的组件之间进行通信

时间:2013-05-30 11:05:27

标签: java swing

我正在Swing中编写简单的Peer-Server-Peer聊天应用程序。在客户端,有一个负责客户端 - 服务器通信的“客户端”对象和一个主要的jForm“MainWindow”。

收到消息后,“客户”需要通知'MainWindow'有关新消息的信息。但是,'MainWindow'是在程序开始时创建的对象(在我创建'Client'之后的情况下),所以我正在寻找一种方法将'MainWindow'引用传递给'Client'。

我正在考虑创建'Resource'类,其中包含我需要在我的应用程序中与之通信的对象的静态引用,但它看起来并不优雅。

有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

看看番石榴的EventBus。 您可以使用它在两个类之间进行通信,而不会相互引用。

答案 1 :(得分:0)

public interface MessageListener {
    public void notify(Message msg);
}

public class MainWindow implements MessageListener {
    public void notify(Message msg) {
        // UI Action
    }
}

public class Client {
    private MessageListener listener;

    public void setMessageListener(MessageListener listener) {
        this.listener = listener;
    }
}

您可以使用类似于发布订阅模式的内容MainWindow订阅发布商Client,并在客户收到消息时可以调用listener.notify方法。因此,notify中的MainWindow方法将被调用。