gpt4 book ai didi

java - 监听 JTabbedPane 面板上的选项卡开关

转载 作者:行者123 更新时间:2023-12-01 14:23:32 36 4
gpt4 key购买 nike

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

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

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

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

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

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

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

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

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

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

最佳答案

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

您应该将选项卡中的数据设置为 Observable(或 Observer Pattern 中的 Subject)。然后,每个选项卡都可以对数据的更改使用react,而不是对其他选项卡的更改使用react。这将减少更新时间,仅在真正需要时进行,并且还将选项卡彼此解耦。

数据可能会通过触发 PropertyChangeEvent's 来表示更改。这些反过来应该触发 Controller 操作,如 Gilber Le Blanc 在评论中建议的那样。

关于java - 监听 JTabbedPane 面板上的选项卡开关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346035/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com