java - 从外部类处理 JFrame 组件的最佳方法

标签 java multithreading swing jlabel

我正在开发一个 swing 应用程序,它调用多个方法并初始化不同的类。 我还有多个线程来处理中间结果。我的要求是在一些标签和文本框中动态显示中间数据。

请帮助我了解以下哪种方法在内存和性能方面最好。

  1. 我可以为所有标签和文本框设置设置方法。这样我就可以使用 swing 类对象调用这些方法,但在这种情况下,我需要将 swing 类对象传递给每个我想要将数据设置为标签的类。
  2. 另一种方法是我可以创建 swing 类的公共(public)静态对象,并且每当需要设置标签文本时我都会从任何类中调用它。

第一种方法会产生更多开销,因为我需要将 Swing 类对象传递给其他类。

第二种方法是最简单的方法,但创建静态对象可能会造成困惑,因为该应用程序包含线程。

我只是想知道该选择哪一个以及为什么?

否则,如果有人从事过一些复杂的 Swing 应用程序开发 - 您是如何解决此类问题的?

最佳答案

这个example是多线程上下文中第一种方法的典型方法。为了方便起见,模型和 View 紧密耦合:每个工作线程都会收到对其应更新的标签的引用。另一种选择是松耦合:每个 View 注册以监听模型,该模型使用 observer pattern 通知所有注册的监听器。 .

这个更简单example使用两种方法:

  • 紧密耦合:工作器在封闭范围内获取对其目标标签的引用。

  • 松散耦合:封闭 View 注册一个 PropertyChangeListener,模型使用它通过 setProgress() 向 View 发出信号。

您需要决定哪一个对您的申请来说是重要的。我同意 @JB Nizet 对第二种方法的评论。

关于java - 从外部类处理 JFrame 组件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11384107/

相关文章:

java - Swing:GlassPane 防止鼠标指针改变

java - 如何从 JTable 中删除所有列?

java - p :InputText prevent pressing enter

java - Java 规范在哪里说 List<T> 分配给 List<? super T>?

java - 从实例化的 Java 数组中读取抛出 NullPointerException 而不是返回 0

java - 如何隐藏 JCombobox 中的项目

java - 监视阻塞操作

Java函数在执行之前返回一个值

c++ - 在 C++ 中局部 unordered_map 变量是线程安全的

java - 禁用 JFrame 的拖动