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

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

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

【问题讨论】:

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

标签: java swing user-interface components communication


【解决方案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....
    }
    

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

    【讨论】:

    • 非常感谢,抱歉我不得不接受 Sam 的回答,因为他说的和你刚才输入的完全一样,但他是第一个。
    猜你喜欢
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多