2010-08-25 74 views
3

我已經使用Eclipse插件Visual Editor來構造Java Swing接口。由於我不是代碼所見即所得的大風扇(UI)編輯器產生,我想優化它,當我注意到,該編輯器使用延遲加載這樣實現的所有元素:Swing和延遲加載組件

private JPanel getSomePanel() 
{ 
    if (somePanel == null) 
    { 
     somePanel = new JPanel(); 
     // construct the panel 
    } 
    return somePanel; 
} 

我知道,當有問題的對象沒有被立即使用時,延遲加載被用來獲得更好的性能。然而,對於大多數用戶界面來說,這樣做的意義不大,因爲例如窗口通常應該從頭開始顯示所有組件。我的情況也是如此,在這種情況下,我有一個相當簡單的清晰佈局,當窗口顯示時,預計所有組件都存在。

Visual Editor在根容器的構造函數中添加了一個initialize調用,其中構建了根面板並添加了所有其他元素(通過延遲加載)。所以實際上所有的組件都是在構建根容器時創建的,只是嵌套到多個方法中。

在這種情況下,實際上是否有任何用於延遲加載的用法?我應該在哪些UI案例中使用延遲加載?當使用延遲加載時,我是否甚至允許直接訪問成員變量 - 或者我應該每次調用getter?

謝謝!

回答

5

當您使用延遲加載時,每次訪問成員變量時應始終使用getter。這是延遲加載的一個基本部分。

但是,在這種情況下,您描述了沒有理由使用延遲加載。我不得不懷疑,Visual Editor的作者是不是隻有懶惰的加載,他覺得它總是需要使用,或者只是決定他想在工具中使用它,出於某種任意的原因。

您完全正確地瞭解UI的組件通常在構建面板時全部加載,因爲它們都是可見的。根據面板上的其他選擇,某些情況下面板的某些部分可能會出現和消失,並且可以想象,您可以在這些情況下使用延遲加載。然而,我的觀點是,人們很可能會點擊界面,並使用所有不同的選項卡和選項,因此您可能需要首先加載所有內容。

很明顯,當你談論加載數據時會有不同的事情發生。如果在面板出現時隱藏下拉菜單,並且加載了大量信息,則可能需要在下拉菜單顯示前才加載該下拉菜單。儘管它仍然隱藏,但我仍然沒有理由不立即實例化下拉列表。

我不會認爲懶加載是面板的標準行爲。我無法提供Visual Editor選擇以這種方式生成代碼的原因。

3

我不是代碼所見即所得 的大風扇(UI)編輯器生成

我滿意。

在這種情況下,實際上是否有任何用於加載的懶惰 ?

我不這麼認爲,組件的創建沒有花時間,因此所有組件在顯示GUI時都應該可見。

對我來說,更大的擔憂是數據。如果組合框和表等組件的數據來自數據庫,則可能不希望先加載它。

+0

你是說我應該懶惰地填充數據元素?我究竟該怎麼做? – poke 2010-08-25 20:00:29

+2

不。他說如果您需要從數據庫加載數據並使用它填充表格或下拉列表,那麼應該使其在單獨的線程中運行,以便在加載時不會阻塞EDT。它不適用於任何類型的默認數據,只有需要來自備用源的數據可能需要一段時間才能加載,並且您不希望在加載時阻止UI。 – 2010-08-25 20:03:36

+0

啊,好吧,這很有道理,謝謝:) – poke 2010-08-25 20:06:49