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

时间:2012-07-08 15:05:03

标签: java multithreading swing jlabel

我正在开发一种称为多种方法的摇摆应用程序。初始化不同的类。 我也有多个线程来处理中间结果。我的要求是在运行中在某些标签和文本框上显示中间数据。

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

  1. 我可以为所有标签和文本框设置setter方法。因此,我可以使用该swing类对象调用这些方法,但在这种情况下,我需要将swing类对象传递给每个类,无论我想将数据设置为标签。
  2. 另一种方法是我可以创建swing类的公共静态对象,每当我需要设置标签文本时,我都会从任何类中调用它。
  3. 第一种方法会产生更多开销,因为我需要将我的Swing类对象传递给其他类。

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

    我只是想知道要去哪一个以及为什么?

    否则,如果有人参与了一些复杂的摇摆应用程序开发 - 你是如何处理这类问题的?

3 个答案:

答案 0 :(得分:3)

example是您在多线程上下文中的第一种方法的典型。为方便起见,模型和视图紧密耦合:每个工作线程接收对应更新的标签的引用。另一种方法是松散耦合:每个视图都注册以侦听模型,该模型使用observer pattern通知所有已注册的侦听器。

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

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

  • 松散耦合:封闭视图会注册PropertyChangeListener,模型会通过setProgress()向该视图发出信号。

您需要确定哪个在您的应用中很重要。我同意@JB Nizet关于第二种方法的评论。

答案 1 :(得分:1)

为什么不使用带有Singleton原理的第二种方法,你可以使用相同的swing类实例,所以不会使用静态 ,它有时令人困惑,因为我们不确定JVM加载静态成员的顺序......

答案 2 :(得分:1)

将GUI视为具有视图的模型。 GUI组件构成视图,同时创建表示模型的模型类。模型中值的更改将反映在视图中。应用程序的其余部分与模型交互,而不是视图。

以下是我所做的Java Spirograph GUI的一个例子。