首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建Java树型结构对象

问如何创建Java树型结构对象
EN

Stack Overflow用户
提问于 2013-10-16 22:43:06
回答 2查看 388关注 0票数 0

我正在处理一个eclipse rcp项目,在这个项目中我需要从TreeStructured Java对象中创建一个树形查看器。目前,我已经对Java对象进行了硬编码,以创建结构,并且运行良好。我需要创建一个计算所有父对象和子对象并形成树结构的方法。它应该是一个递归方法。我写了一个递归方法来生成树形结构的java对象。但是它不能正常工作。我不知道问题到底出在哪里。请求您在这方面提供帮助。请找到下面的代码。

代码语言:javascript
复制
private FileParent getInput() {

        FileParent root = new FileParent("Root");

        FileParent A = new FileParent("A");
        FileParent a1 = new FileParent("A1");
        FileObject a11 = new FileObject("A11");
        a1.addChild(a11);
        FileObject a2 = new FileObject("A2");
        A.addChild(a1);
        A.addChild(a2);


         FileParent b = new FileParent("B"); FileObject b1 = new
         FileObject("B1"); FileObject b2 = new FileObject("B2");
         b.addChild(b1); b.addChild(b2);

        root.addChild(A);
        // root.addChild(b);

        return root;

    }

我的递归方法是遍历所有的父对象和子对象,并创建树结构对象。

代码语言:javascript
复制
FileParent root1 = new FileParent("Root");
    public FileParent getChildren(FileParent root) {

            if (!root.hasChildren()) {
                return root;
            }
            if (root != null && root.hasChildren()) {

                FileObject[] children = root.getChildren();// size two

                for (FileObject fileObject : children) { // 2 times

                    // here children will be the folders
                    if (fileObject instanceof FileParent) {
                        FileParent folder = (FileParent) fileObject;
                        // root1.setParent(folder.getParent());
                        // if (root1.getParent() != null) {

                        root1.addChild(folder);
                        // }
                        getChildren((FileParent) folder);
                    } else {
                        System.out.println("FileName: " + fileObject.getName());
                        // root1.setParent(fileObject.getParent());
                        // if (root1.getParent() != null) {

                        root1.addChild(fileObject);
                        // }

                    }

                }

            }

            return root1;
        }

公共类FileObject {

代码语言:javascript
复制
    private String name;
    private FileParent parent;

    public FileObject(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setParent(FileParent parent) {
        this.parent = parent;
    }

    public FileParent getParent() {
        return parent;
    }

    public String toString() {
        return getName();
    }


}

公共类FileParent扩展了FileObject { /** /

代码语言:javascript
复制
private List<FileObject> children;

public FileParent(String name) {
    super(name);
    children = new ArrayList<FileObject>();
}

public void addChild(FileObject child) {
    // if (children.contains(child)) {
    children.add(child);
    child.setParent(this);
    // }
}

public void removeChild(FileObject child) {
    children.remove(child);
    child.setParent(null);
}

public FileObject[] getChildren() {
    return (FileObject[]) children.toArray(new FileObject[children.size()]);
}

public boolean hasChildren() {
    return children.size() > 0;
}

}

EN

回答 2

Stack Overflow用户

发布于 2013-10-16 22:58:40

在Swing中有一个带有default implementation的接口TreeModel,应该在JTree中使用,通常不是以最好的方式编写的(就像没有泛型一样),但可以完成这项工作。

票数 0
EN

Stack Overflow用户

发布于 2013-10-17 15:18:45

在treeviewer.setInput(Object Obj)中有一个方法,我将getInput()作为参数传递,它会工作得很好。但是,如果我传递getChildren(),这是我的递归方法,它不能工作。

你是说你要给treeviewer.setInput(foo.getChildren())打电话吗?这绝对是错的。阅读这篇文章:http://www.vogella.com/articles/EclipseJFaceTree/article.html。

基本上,您需要1)实现ITreeContentProvider以提供树结构;2)实现ILabelProvider以提供文本和图像;3)调用

代码语言:javascript
复制
treeViewer.setContentProvider(yourContentProvider);
treeViewer.setLabelProvider(yourLabelProvider);
treeviewer.setInput(new Object()); // or anything for which your content provider returns correct roots
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19406460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档