2009-06-22 44 views
3

我已經創建了一個Java Swing應用程序,並且我意識到在窗體上有許多組件。許多圖形組件會以何種方式影響Swing GUI的性能?

這並不是說我的界面是cluttered,但總量可能會很高(數百),因爲用戶可以啓用接口的其他部分,並且必須在表單上有類似列表的重複面板。

此外,許多組件被封裝到一個JXLayer,再次增加了可視組件的數量。

到目前爲止,除了在滾動和調整大小期間的滯後之外,我無法檢測到任何問題。

  • 組件數量是否有任何理論上的限制? (我懷疑它,但我也必須在VB6中編碼,所以我一直在那裏......)
  • 是否有任何實際限制?在工作中,我們有一些中端工作站可以一眼看到,但Java/Swing如何對低端工作站或組件的極端數量做出反應?
  • 除了檢查用戶的主觀印象之外,是否有任何方式來剖析我的應用程序的GUI?是否有任何的客觀指標,我可以找(在javax.swing.SwingCoreClassWhichContainsBottleneckCode什麼的花像總時間...)
+0

你能給我們一個窗口的截圖嗎? – akarnokd 2009-06-22 08:11:16

回答

4

搖擺可處理組分的顯著數目只有存儲器的限制,特別是在使用簡單的部件(文本框,標記,單選按鈕等)。有一些技巧,例如縮小窗口大小,並將所有內容封裝在JScrollPane中,但通常都需要標準技術,例如在後臺進行繁重的處理。

我公司正在開發的功能之一涉及到一個包含少數標籤和一個按鈕的重複JPanel對話框。我們在舊版的Mac Mini(英特爾核心獨奏,512MB RAM)上測試它,並創建500個面板需要幾秒鐘的時間才能加載,但在此之後,通過面板列表滾動或添加新面板的速度並不慢。

對於嚴重的性能問題,請查看JTable,這對於顯示大量數據而言是非常高度優化的。創建自定義渲染器和編輯器有點困難,但並非不可能。

3

只有內存和底層操作系統限制了部件的數量。

實際限制有點用戶主觀。嘗試將UI分割爲單獨的選項卡或JFrame,這將限制每個屏幕的渲染開銷。

JVisualVM在剖析java應用程序方面非常出色。您將需要移除類過濾器以查看配置的sun *和javax *類。

3
  1. 在理論上,你可以爲你喜歡有儘可能多的成分。

  2. 實際限制是RAM的數量。另外,如果組件太多,用戶界面開始變慢,因此性能也是一個問題(一如既往)。 Java 6會有所幫助。

  3. 是的。您可以創建UI,然後在shell級別強制重繪(以便所有內容都被繪製)並測量它。使用探查器應該讓你瞭解哪個組件特別慢。