我有一个显示一些节点的BeanTreeView。我还有另一个与netbeans无关的组件,需要知道此时树中的内容。优选地,只是树中节点的直列表。 (澄清;当我在这里讨论节点时,我指的是netbeans节点,而不是JTree中的TreeNodes。)
我没有找到任何有用的方法来做到这一点。我似乎无法从连接到BeanTreeView的关联ExplorerManager获取信息。到目前为止,我已经将BeanTreeView子类化,并添加了私有方法
private List<Object> getNodesAsList(){
LinkedList<Object> result = new LinkedList<>();
for (int i = 0; i < tree.getRowCount(); i++) {
TreePath pathForRow = tree.getPathForRow(i);
Object lastPathComponent = pathForRow.getLastPathComponent();
result.add(lastPathComponent);
}
return result;
}
我从getLastPathComponent获取的对象是一个VisualizerNode,它包含我想要的节点。但我无法转换为VisualizerNode,因为它在org.openide.explorer.view中不公开。这是最后的。无论如何,节点都没有吸气剂......
有什么想法吗?我觉得ExplorerManager错过了一些东西......
更新;这对我有用,可能会更优雅。谢谢稻田!
private List<Node> getNodesInTree(){
LinkedList<Node> result = new LinkedList<>();
ExplorerManager em = ExplorerManager.find(this);
for (Node node : em.getRootContext().getChildren().getNodes()) {
result.add(node);
result.addAll(getChildNodesInTree(node));
}
return result;
}
private List<Node> getChildNodesInTree(Node root){
LinkedList<Node> result = new LinkedList<>();
if(root.getChildren().getNodesCount() > 0){
if(isExpanded(root)){
for (Node node : root.getChildren().getNodes()) {
result.add(node);
result.addAll(getChildNodesInTree(node));
}
}
}
return result;
}
答案 0 :(得分:2)
您可以使用ExplorerManager.getRootContext()
。这将返回ExplorerManager中显示的根节点。从此节点,您可以遍历所有其他节点(使用Node.getChildren()
)并创建自己的列表。我不知道有一个功能可以为你处理。