0

TreeStructured Java オブジェクトからツリービューアーを作成する必要がある eclipse rcp プロジェクトに取り組んでいます。現在、構造を作成するために Java オブジェクトをハードコードしており、正常に動作しています。親と子のすべてのオブジェクトを計算し、ツリー構造を形成するメソッドを作成する必要があります。再帰的なメソッドである必要があります。ツリー構造の Java オブジェクトを生成する再帰メソッドを作成しました。しかし、それは正しく機能しません。問題がどこにあるのか正確にはわかりません。これについてあなたに助けを求めます。以下のコードを見つけてください。

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;

    }

親と子のすべてのオブジェクトをトラバースし、ツリー構造のオブジェクトを作成する再帰的な方法です。

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;
        }

パブリック クラス ファイル オブジェクト {

    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();
    }


}

public class FileParent extends FileObject { /** * */

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;
}

}

4

2 に答える 2

0

treeviewer.setInput(Object obj) には 1 つのメソッドがあります。パラメーターとして getInput() を渡すと、正常に動作します。しかし、再帰メソッドである getChildren() を渡すと、機能しません。

電話しているということtreeviewer.setInput(foo.getChildren())ですか?これは絶対に間違っています。この記事を読んでください: http://www.vogella.com/articles/EclipseJFaceTree/article.html

基本的に、1)ITreeContentProviderツリー構造を提供するために実装する必要があります。2)ILabelProviderテキストと画像を提供するために実装する。3) コール

treeViewer.setContentProvider(yourContentProvider);
treeViewer.setLabelProvider(yourLabelProvider);
treeviewer.setInput(new Object()); // or anything for which your content provider returns correct roots
于 2013-10-17T07:18:44.647 に答える
0

Swing には、JTree で使用されると想定されるデフォルトの実装を持つTreeModelインターフェースがあり、通常は最善の方法で書かれていません (ジェネリックがないなど) が、仕事はできます。

于 2013-10-16T14:58:40.120 に答える