2

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

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

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

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

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

我只想知道去哪一个,为什么?

否则,如果有人从事过一些复杂的 Swing 应用程序开发——你是如何处理这些问题的?

4

3 回答 3

3

示例是您在多线程上下文中的第一种方法的典型。为了方便起见,模型和视图是紧密耦合的:每个工作线程都会接收到它应该更新的标签的引用。另一种选择是松散耦合:每个视图注册以侦听模型,模型使用观察者模式通知所有注册的侦听器。

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

  • 紧耦合:worker 在封闭范围内获得对其目标标签的引用。

  • 松散耦合:封闭视图注册 a PropertyChangeListener,模型使用它通过 向视图发送信号setProgress()

您需要决定在您的应用程序中哪些是重要的。我同意@JB Nizet 关于第二种方法的评论。

于 2012-07-09T16:44:12.360 回答
1

为什么不使用Singleton原理的第二种方法,可以使用同一个swing类的单个实例,这样就没有使用static了,而且它有时会令人困惑,因为我们不确定JVM加载的顺序静态成员...

于 2012-07-08T18:54:48.003 回答
1

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

这是我所做的Java Spirograph GUI中的一个示例。

于 2012-07-09T14:17:36.300 回答