许多图形组件如何影响Swing GUI的性能?

3
我创建了一个Java Swing应用程序,发现表单上有很多组件。虽然我的界面并非杂乱无章,但总数仍然可能相当高(数百个),因为用户可以启用界面的其他部分,并且表单上必须有类似列表的重复面板。此外,许多组件都被包装在JXLayer中,这又增加了可视化组件的数量。目前除了滚动和调整大小时出现延迟之外,我还没有发现任何问题。
  • 组件数量是否存在理论限制?(我怀疑不会,但我也必须在VB6中编码,所以我有经验...)
  • 是否存在实际限制?在工作中,我们有一些中档工作站,乍一看表现良好,但Java/Swing在低端工作站或极端组件计数下如何反应?
  • 除了检查用户的主观印象外,是否有其他方法来分析我的应用程序的GUI?是否有任何客观指标可以查找(例如在javax.swing.SwingCoreClassWhichContainsBottleneckCode中花费的总时间或类似内容...)

你能给我们提供窗口的截图吗? - akarnokd
很遗憾,我们公司的政策不允许这样做,因为这是一个未完成的产品。 - Daniel Rikowski
3个回答

4
Swing可以处理大量组件,仅受内存限制,特别是使用简单组件(文本框、标签、单选按钮等)。有一些技巧,例如减小窗口大小并将所有内容包装在JScrollPane中,但通常使用后台进行重处理等标准技术就足够了。
我们公司正在开发的一个功能涉及一个带有重复JPanel的对话框,其中包含一些标签和按钮。我们在旧的Mac Mini上进行了测试(intel core solo with 512mb ram),创建500个面板需要几秒钟才能加载,但之后滚动面板列表或添加新面板并不慢。
对于严重的性能问题,请查看JTable,它非常优化以显示大量数据。创建自定义渲染器和编辑器有点困难,但并非不可能。

3

只有内存和底层操作系统限制了组件的数量。

实际限制有点主观。尝试将 UI 拆分成单独的选项卡或 JFrames,这将限制每个屏幕的渲染开销。

JVisualVM 在分析 Java 应用程序方面非常出色。您需要删除类筛选器才能查看 sun* 和 javax* 类的分析数据。


3
  1. 理论上,你可以有任意数量的组件。

  2. 实际上,你的RAM将是一个限制。当你有太多组件时,UI也会开始变得缓慢,因此性能也是一个问题(一如既往)。Java 6会有所帮助。

  3. 可以。你可以创建UI,然后在shell级别强制重绘(以便所有内容都被重绘),并对其进行测量。使用分析器应该可以让你知道哪个组件特别慢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接