Java使组件相互通信

时间:2013-10-29 17:34:43

标签: java swing user-interface components communication

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

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

2 个答案:

答案 0 :(得分:2)

一些想法:

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

无论MVC如何,都可能有一个控制器类,通过嵌套的JPanelJTextField等获取对UI对象(iE JLabel s)的所有必要引用构造函数。 在构造时,该控制器可以将自身附加到那些嵌套组件。 控制器最好包含嵌套的,内部的或可能是匿名的类,用于实现监听器接口,而不是将监听器接口添加到控制器本身。首先,要封装这些侦听器,其次要避免事件源的区别,如果需要为多个组件(源)实现相同的接口。这些侦听器实现(可能是非常通用的PropertyChangeListener)可以充当或使用mediator对象(如上所述)来更新其他组件。

答案 1 :(得分:1)

如果您有提交按钮,则可以向其添加动作侦听器。单击时,您可以调用其他类中将接收字符串的方法,然后将其显示在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....
}

希望这有帮助...对于我仍然是StackOverflow新手的格式感到抱歉