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 对象(即JPanel
s 和嵌套JTextField
s 和JLabel
s 等)的所有必要引用。
在构造时,该控制器可以将自己附加到那些嵌套组件。
控制器最好包含嵌套的、内部的或者可能是匿名的类来实现监听器接口,而不是把监听器接口添加到控制器本身。第一,封装这些监听器,第二,避免事件源区分,如果需要为多个组件(源)实现相同的接口。这些侦听器实现(可能是相当通用的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 使组件相互通信的主要内容,如果未能解决你的问题,请参考以下文章