我已经实现了https://blogs.oracle.com/geertjan/file-browser以仅显示文件夹(将 accept() 中的 == 更改为 !=)。但是,无论我做了什么,它只调用第一级的 FileFilterNodeChildren,即根节点的子节点。所以我得到的是根节点的文件夹(我想要的目录),但它显示了这个级别以下的所有文件和文件夹。我已经放入了验证过滤器函数仅在第一级调用的语句。
我需要做什么来过滤第一级及以下的孩子?
我已经实现了https://blogs.oracle.com/geertjan/file-browser以仅显示文件夹(将 accept() 中的 == 更改为 !=)。但是,无论我做了什么,它只调用第一级的 FileFilterNodeChildren,即根节点的子节点。所以我得到的是根节点的文件夹(我想要的目录),但它显示了这个级别以下的所有文件和文件夹。我已经放入了验证过滤器函数仅在第一级调用的语句。
我需要做什么来过滤第一级及以下的孩子?
在 createNodes() 内部,您需要使用 FileFilterNode 的实例包装子节点。这是 createNodes() 的修订版本:
@Override
protected Node[] createNodes(Node object) {
List<Node> result = new ArrayList<Node>();
for (Node node : super.createNodes(object)) {
if (accept(node)) {
// This is the only changed line
result.add(new FileFilterNode(node));
}
}
return result.toArray(new Node[0]);
}
这已在 Windows 上的 NetBeans 8.2 中进行了测试,并按预期工作。“文件浏览器”显示一个仅包含所有级别文件夹的树。