【发布时间】:2011-01-10 16:57:02
【问题描述】:
我的任务是对我们这里的 Java Swing 应用程序进行重构,这非常麻烦。我的工作是清理代码并使其更具动态性,因为我们将在第二个项目中开始使用它,并且它需要能够进行适当的调整。一个窗口的一小部分包含
- 一个按钮
- 用于选择日期的 JFormattedTextField。
- 显示数据的 3X4 JLabel 表。
最初编写此代码的人只是使用 GridBagLayout JPanel,然后对所有内容进行硬编码,包括表的标题和行标签,并在动态数据位置留下空的 JLabel。当收到动态信息时,setText 会使用文本数据调用。我的部分重构将导致整个表格在维度和内容上都是动态的,因此我决定将表格设为具有 GridLayout 的子面板,并使用这段代码动态设置内容和维度:
我已经证实,每次创建窗口时只会调用一次,但整个窗口现在非常缓慢。响应帧中其他部分的点击可能需要超过 5 秒的时间,而这些点击过去会在几分之一秒内做出响应。有谁知道这会导致什么? GridLayouts 有什么我不明白的地方吗?
【问题讨论】:
-
问题可能不包含在问题中。尝试过探查器,或者甚至只是
jstack,如果它需要这么长时间? (而且你在 AWT EDT 上做所有 Swing 工作,对吗?) -
不,我正在使用的代码不会从 EDT 执行任何 GUI 更新,我什至没有意识到这一点。我讨厌那些“这是怎么工作的?”时刻。如果您将此作为答案发布,我会接受它,我认为您领先于发布相同内容作为答案的人。