【发布时间】:2013-06-27 14:34:17
【问题描述】:
我开发了一个简单的 Swing GUI 以允许用户编辑我的应用程序的数据。用户界面相当简单:
- 包含 JTabbedPane 的 JFrame。
- 每个选项卡都由 JPanel 的一个子类组成,该子类提供编辑数据方面的工具。
- 数据本身包含在一个对象中,并且一个引用被传递给每个 JPanel。
但是有一个问题:我需要同步不同的 JPanel。
例如,数据对象存储人员列表和任务列表。
一个 JPanel 允许用户编辑人员。他可以创建新的 Person 并删除现有的。
第二个 JPanel 允许用户将人员分配给任务。
两个 JPanel 在首次打开时都会被初始化。创建组件并设置布局。现在用户可以开始使用 UI。
- 他打开 JTabbedPane 的第一个选项卡并创建了第一个 Person。
- 他打开了第二个标签。第二个选项卡的组件被初始化并列出可用的一个人。他分配了一项任务。
- 他返回到第一个选项卡并创建了第二个人。
- 他切换回第二个选项卡来处理新人。
但是第二个选项卡和它包含的 JPanel 已经被初始化了。除非更新 JPanel,否则用户将看不到第二个人。我已经在我的 JPanel 子类上为选项卡 2 实现了一个自定义更新方法。但是我该如何调用它呢?
我需要重绘组件时触发的 Swing 事件。
【问题讨论】:
-
您应该有一个 GUI 数据模型,其中包含所有人员和任务信息。每个 JPanel 都会更新,并通过控制器操作由数据模型的内容更新。这是构建 GUI 应用程序的模型/视图/控制器架构。
-
我知道 MVC 模式。 Swing 几乎迫使你使用它。我要实现的是控制器。我只需要找到一种方法让控制器知道数据何时更新。 Victor Seifert 给出了完美的答案
标签: java swing user-interface awt