Java 使组件相互通信

Posted

技术标签:

【中文标题】Java 使组件相互通信【英文标题】:Java make components talk to each other 【发布时间】:2013-11-09 00:39:00 【问题描述】:

假设我有一个 gui,该 gui 由两部分组成,每个部分都有自己的类。 所以一个类包含一个 JLabel。 第二类包含一个带有提交按钮的文本字段。 我将如何让这两个组件相互通信?

这当然是一个简单的例子,但是如果我有两个类,一个用于提交数据,一个用于显示提交的数据,那么如何让这两个组件通信?

【问题讨论】:

如果这两个班级是同事和/或观察者模式,您可以使用Mediator 这个问题太笼统了。有很多方法可以让类进行通信,并且有很多关于良好模式的文档。请让您的问题更具体。 @jzd 我不知道如何让两个类相互通信。只要有效,任何方法都可以,我现在正在看 Mediator,它看起来不错,但我从来不知道这种方法。 【参考方案1】:

一些想法:

不要将此类绑定添加到 GUI 类中,寻找类似 @​​987654321@ 的模式 单向更改传播(如您的示例中的输入 -> 输出)通常不会出现问题,但在许多情况下,需要完全同步可编辑组件组。因此,在开发简单案例时可以牢记这一点,以确保任何自定义类或接口具有良好的可重用性。 避免使用标志而不是比较组件值进行无限循环更新。 无论你做什么,保持分开,无论你使用什么模式,不要添加双向引用(例如在 GUI 类 控制器之间)

不管 MVC 是什么,都可能有一个控制器类,通过构造函数获取对 UI 对象(即JPanels 和嵌套JTextFields 和JLabels 等)的所有必要引用。 在构造时,该控制器可以将自己附加到那些嵌套组件。 控制器最好包含嵌套的、内部的或者可能是匿名的类来实现监听器接口,而不是把监听器接口添加到控制器本身。第一,封装这些监听器,第二,避免事件源区分,如果需要为多个组件(源)实现相同的接口。这些侦听器实现(可能是相当通用的PropertyChangeListener's)然后可以充当或使用mediator 对象(如前所述)来更新其他组件。

【讨论】:

【参考方案2】:

如果你有一个提交按钮,你可以给它添加一个动作监听器。单击后,您可以调用其他类中的方法,该方法将接收字符串,然后将其显示在您的 JLabel 上。然而,为不同的组件创建多个类通常不是一个好主意,而像 Sam 所说的那样拥有一个 MVC 会好得多。

JTextArea 类

//Have this object created
JLabelClass JLC = new JLabelClass();

//When submit button is clicked run this
JLC.displayText(JTextArea.getText());

使用 JLabel 的内部类

//add this method
public void displayText(String text)
    JLabel.setText(text);
    //Refresh Gui and display stuff....

希望这对您有所帮助...抱歉,我还是 *** 的新手

【讨论】:

非常感谢,抱歉我不得不接受 Sam 的回答,因为他说的和你刚才输入的完全一样,但他是第一个。

以上是关于Java 使组件相互通信的主要内容,如果未能解决你的问题,请参考以下文章

配置隔离组使二层之间不能相互通信,但可以与外部网络通信。

配置隔离组使二层之间不能相互通信,但都可以与外部通信

vue 兄弟组件相互通信

vue组件父子之间相互通信案例

配置隔离组使二层之间不能相互通信,但能与外层互通

Vue2.x中的父子组件相互通信