我正在编写一个 Java 树,其中树节点的子节点可能需要很长时间来计算(在这种情况下,它是一个文件系统,其中可能存在网络超时,从而阻止从连接的驱动器获取文件列表)。
我发现的问题是:
getChildCount()
在用户特别请求打开树的特定分支之前调用。我相信这样做是为了JTree
知道是否在节点旁边显示 + 图标。准确计数来自的孩子
getChildCount()
需要执行潜在的昂贵操作如果我伪造 的值
getChildCount()
,那么在请求枚举子节点之前,树只会为那么多子节点分配空间。(如果我返回“1”,我只会看到列出的 1 个孩子,尽管还有更多)
孩子的枚举可能既昂贵又耗时,我可以接受。但我不getChildCount()
同意需要知道孩子的确切数量。
有什么办法可以解决这个问题吗?
补充:另一个问题是,如果其中一个节点代表一个软盘驱动器(多么古老!),驱动器将在用户请求其文件之前被轮询;如果驱动器中没有磁盘,则会导致系统错误。
更新:不幸的是,实现TreeWillExpand
监听器不是解决方案。这可以让您否决扩展,但显示的节点数仍受TreeNode.getChildCount()
.