获取BeanTreeView中的所有节点

时间:2013-10-09 08:00:37

标签: java netbeans-platform

我有一个显示一些节点的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;
}

1 个答案:

答案 0 :(得分:2)

您可以使用ExplorerManager.getRootContext()。这将返回ExplorerManager中显示的根节点。从此节点,您可以遍历所有其他节点(使用Node.getChildren())并创建自己的列表。我不知道有一个功能可以为你处理。

相关问题