我正在编写Java树,其中树节点可能需要花费很长时间才能计算出子节点(在这种情况下,这是一个文件系统,其中可能存在网络超时,从而无法从连接的驱动器中获取文件列表)。

我发现的问题是这样的:

在用户明确要求打开树的特定分支之前,将调用

  • getChildCount()。我相信这样做是为了让JTree知道是否在节点旁边显示+图标。
  • 要准确地计算getChildCount()中的子代数,需要执行可能昂贵的操作
  • 如果我伪造getChildCount()的值,则在请求枚举子节点之前,树仅为该多个子节点分配空间。 (如果我返回“1”,尽管有更多孩子,我只会看到列出的一个孩子)

  • 对孩子进行枚举可能既昂贵又费时,我可以接受。但是我不喜欢getChildCount()需要知道孩子的确切人数。

    有什么办法可以解决这个问题?

    已添加:另一个问题是,如果其中一个节点代表一个软盘驱动器(多么陈旧!),将在用户询问其文件之前对该驱动器进行轮询。如果驱动器中没有磁盘,则会导致系统错误。

    更新:不幸的是,实现TreeWillExpand侦听器不是解决方案。这可以使您否决扩展,但是显示的节点数仍然受TreeNode.getChildCount()返回的值限制。

    最佳答案

    http://java.sun.com/docs/books/tutorial/uiswing/components/tree.html#data

    向下滚动一点,那里有关于如何为jtree创建延迟加载节点的确切教程,并附带示例和文档

    09-12 11:50