Java 从类外处理JFrame组件的最佳方法
我正在开发一个swing应用程序,它调用多个方法并初始化不同的类。 我还有多个线程,它们在其中处理中间结果。我的要求是在一些标签和文本框中动态显示中间数据 请帮助我以下哪种方法在内存和性能方面是最好的Java 从类外处理JFrame组件的最佳方法,java,multithreading,swing,jlabel,Java,Multithreading,Swing,Jlabel,我正在开发一个swing应用程序,它调用多个方法并初始化不同的类。 我还有多个线程,它们在其中处理中间结果。我的要求是在一些标签和文本框中动态显示中间数据 请帮助我以下哪种方法在内存和性能方面是最好的 我可以为所有标签和文本框使用setter方法。因此,我可以使用swing类对象调用这些方法,但在这种情况下,我需要将swing类对象传递给每个类,只要我想将数据设置为标签 另一种方法是,我可以创建swing类的公共静态对象,并在需要设置标签文本时从任何类调用它 第一个方法会产生更多开销,因为我需要
否则,如果有人从事过一些复杂的swing应用程序开发,您是如何处理此类问题的?为什么不使用带有单例原则的第二种方法,在这种方法中,您可以使用swing类的同一个单例,因此将不再使用静态方法,它有时令人困惑,因为我们不确定JVM加载静态成员的顺序…将GUI视为具有视图的模型。当您创建表示模型的模型类时,GUI组件构成了视图。对模型中的值所做的更改将反映在视图中。应用程序的其余部分与模型交互,而不是与视图交互 这里有一个例子,是我在一家公司做的 这是多线程环境中第一种典型的方法。为了方便起见,模型和视图是紧密耦合的:每个工作线程接收到一个对它应该更新的标签的引用。另一种选择是松耦合:每个视图注册以侦听模型,该模型使用 该方法使用两种方法:
- 紧密耦合:工作者在封闭范围内获得对其目标标签的引用
- 松散耦合:封闭视图注册了一个
,模型使用它通过PropertyChangeListener
向视图发送信号setProgress()
您需要决定在应用程序中哪个是重要的。我同意@JB Nizet关于第二种方法的评论。忘掉你的第二种方法吧。很难看。不应该有那么多不同的对象需要更新给定的框架或面板。您计划如何在不使用静态字段的情况下实现您的单例?整个类中只有一个静态字段,即实例本身。其他字段根本不需要是静态的。有关更多详细信息,请参阅Head First设计模式的Singleton章节。。。