2011-05-01 25 views
3

我在我的swing應用程序中有一個JTree,顯示一個long數據列表(int樹模式)。Java Swing JTree TreeModel - 如何做懶惰的初始化

問題是TreeModel在初始化過程中加載所有項目,我不需要全部加載它們。在一個屏幕上只有100個可顯示,因此沒有意義要加載數千個數據以在一個屏幕中僅顯示100個數據。

問:有什麼辦法可以在TreeModel中進行一種惰性初始化,並在需要時檢索數據?

感謝所有

回答

3

TreeWillExpandListener 見例如this

+0

@StanislavL:問題是,當我將模型設置爲Tree時,即使在顯示它們之前立即檢索所有記錄(近2000條記錄)。 – mhshams 2011-05-01 11:12:53

+0

@StanislavL +1很好的答案我可以看到你如何使用它來達到這個目的。 – Boro 2011-05-01 11:38:05

+0

@mohammad shamsi你可以請分享代碼,我可以玩它,我討厭從頭開始。我對可複製的解決方案感興趣,以備將來參考。 – Boro 2011-05-01 11:49:39

1

我假設你正在使用DefaultTreeModel的。

我已經通過實施自定義TreeModel解決了這樣的問題。它看起來很複雜,但一旦你進入它,你會發現它並沒有那麼糟糕。你只有8種方法可以實現,如果你已經有了一個類似樹的數據結構,那麼大多數方法都是非常簡單的。

這種方法的主要好處是您可以完全控制底層模型。

+0

@Maman:我有自定義TreeModel,但結果仍然是一樣的。在JTree中設置模型後立即檢索所有樹節點。 – mhshams 2011-05-01 11:07:44

+0

你的樹的結構如何?你有10K直系孩子的根? – 2011-05-01 11:50:29

+0

@Maman:是的,就像那樣,我有一個超過20K直系孩子的根。 – mhshams 2011-05-01 12:58:55