如何从多个类更新GUI?

时间:2014-07-29 23:18:03

标签: java swing user-interface interface abstract-class

假设我有一个构建GUI的类,并且有一个方法updateMainUI(String text),可以将文本附加到JTextArea。目前,我正在使用抽象类和方法来更新来自不同类的字段,但我想知道这是否是“正确”的方法呢?

我现在有三个抽象类,它有一个protected abstract updateUI(String text)方法,我在我的GUI类中重写,以便在需要时更新字段,但我在多个类中做同样的事情,现在我感觉像我需要另一个完全相同的课程。

有更好或更可接受的方法吗?

1 个答案:

答案 0 :(得分:1)

从您的问题来看,很难100%确定,但是,通常鼓励使用Model–view–controller方法解决这些类型的问题。

这就是,模型定义了"虚拟"状态,视图向用户表示此状态,控制器控制从视图...

启动的模型的更改

模型在视图发生变化时会通知视图,因此它可以更新状态,并且当视图/状态的某些部分发生变化时,视图会通知控制器,并且可能会反映在模型中。

为此,我建议您定义某种模型,通常由interface描述,可以由程序的各个方面使用。模型的更新不需要来自用户/ UI,但是您需要确保清楚地记录通知何时来自事件调度线程以外的其他线程,因此您的UI代码可以正确动作并同步更新。

因此,根据您的示例,您的模型可能有一个方法调用setText(或其他类似的方法),它会向已注册的侦听器触发某种事件通知。

该模型的实例将在您的应用程序的各个类之间共享

您的主UI将是这些类之一,在模型状态中进行更改,当它检测到更改时,它会相应地更新其状态。

这是observer pattern的示例,您可以在整个Swing中使用它(通过它的侦听器/事件API)