我正在编写Java树,其中树节点可能需要花费很长时间才能计算出子节点(在这种情况下,这是一个文件系统,其中可能存在网络超时,从而无法从连接的驱动器中获取文件列表)。
我发现的问题是这样的:
在用户明确要求打开树的特定分支之前,将调用
getChildCount()
。我相信这样做是为了让JTree
知道是否在节点旁边显示+图标。 getChildCount()
中的子代数,需要执行可能昂贵的操作getChildCount()
的值,则在请求枚举子节点之前,树仅为该多个子节点分配空间。 (如果我返回“1”,尽管有更多孩子,我只会看到列出的一个孩子)对孩子进行枚举可能既昂贵又费时,我可以接受。但是我不喜欢
getChildCount()
需要知道孩子的确切人数。有什么办法可以解决这个问题?
已添加:另一个问题是,如果其中一个节点代表一个软盘驱动器(多么陈旧!),将在用户询问其文件之前对该驱动器进行轮询。如果驱动器中没有磁盘,则会导致系统错误。
更新:不幸的是,实现
TreeWillExpand
侦听器不是解决方案。这可以使您否决扩展,但是显示的节点数仍然受TreeNode.getChildCount()
返回的值限制。 最佳答案
http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html#data
向下滚动一点,那里有关于如何为jtree创建延迟加载节点的确切教程,并附带示例和文档