2011-05-01 26 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