java - 如何从多个类更新 GUI?

标签 java swing user-interface interface abstract-class

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

我现在有三个抽象类,它们的 protected abstract updateUI(String text)我在 GUI 类中重写的方法,以便在需要时更新字段,但我在多个类中执行相同的操作,现在我觉得我需要另一个类来执行完全相同的操作。

有更好或更容易接受的方法吗?

最佳答案

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

也就是说,模型定义了“虚拟”状态, View 向用户表示此状态, Controller 控制从 View 发起的对模型的更改...

当 View 发生变化时,模型会通知 View ,因此它可以更新状态,并且当 View /状态的某些部分发生变化并可能反射(reflect)在模型中时, View 会通知 Controller 。

为此,我鼓励您定义某种模型,该模型通常由可以由程序的各个方面使用的接口(interface)来描述。对模型的更新不需要来自用户/UI,但您需要确保清楚地记录通知何时可能来自事件调度线程之外的不同线程,以便您的 UI 代码可以采取正确的操作并同步更新。

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

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

你的主 UI 将是这些类之一,监听模型状态的变化,当它检测到变化时,它会相应地更新其状态。

这是 observer pattern 的示例您会看到它在 Swing 中得到广泛使用(通过它的监听器/事件 API)

关于java - 如何从多个类更新 GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026458/

相关文章:

java - 如何对ArrayList中的数组进行排序?

java - 使用 EclipseLink JPA 将 XML 类型存储到 PostgreSQL

Java Swing GUI 似乎没有

winforms - 如何使图片框可选择?

c++ - Qt Creator Options 选项卡等对话框的示例代码

java - 设置 Java 值

java - JVM 是否记录对象或 block 的生成计数?

java - 具有自定义背景的 JScrollPane

java - 如何在 GridBagLayout 中的两个 JLabel 之间添加 JSeparator

java - 如何在 JLabel 上放置一个计时器每秒更新一次