0

我开发了一个简单的 Swing GUI 来允许用户编辑我的应用程序的数据。用户界面相当简单:

  • 包含 JTabbedPane 的 JFrame。
  • 每个选项卡都由 JPanel 的一个子类组成,该子类提供工具来编辑数据的某个方面。
  • 数据本身包含在一个对象中,并且一个引用被传递给每个 JPanel。

但是有一个问题:我需要同步不同的 JPanel。

例如,数据对象存储人员列表和任务列表。

  • 一个 JPanel 允许用户编辑人员。他可以创建新的人员并删除现有的人员。

  • 第二个 JPanel 允许用户将人员分配给任务。

两个 JPanel 在首次打开时都会被初始化。创建组件并设置布局。现在用户可以开始使用 UI。

  1. 他打开 JTabbedPane 的第一个选项卡并创建了第一个 Person。
  2. 他打开第二个标签。第二个选项卡的组件被初始化并列出可用的一个人。他分配了一个任务。
  3. 他返回到第一个选项卡并创建了第二个人。
  4. 他切换回第二个选项卡来处理新人。

但是第二个选项卡和它包含的 JPanel 已经被初始化了。除非更新 JPanel,否则用户将看不到第二个人。我已经在我的 JPanel 子类上为选项卡 2 实现了一个自定义更新方法。但是我该如何调用它呢?

我需要重绘组件时触发的 Swing 事件。

4

1 回答 1

1

实际上,即使您设法找到被触发的事件,当第一个面板被重绘时更新第二个面板也是一个坏主意。这将导致第二个面板在第一个面板的每次重绘时更新,无论重绘是否意味着基础数据已更改(考虑未保存的数据)。

您应该将数据设置为您的选项卡Observable(或Subject来自观察者模式)。然后每个选项卡都可以对数据的更改而不是其他选项卡的更改做出反应。这会将更新时间减少到仅在真正需要时进行,并且还会将选项卡彼此分离。

数据可以通过触发PropertyChangeEvent来表示更改。这些反过来应该触发 Gilber Le Blanc 在评论中建议的控制器操作。

于 2013-06-27T15:01:32.827 回答