0

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

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

4

2 回答 2

2

一些想法:

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

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

于 2013-10-29T18:00:33.077 回答
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 还是新手感到抱歉

于 2013-10-29T18:22:34.423 回答