TreeViewBasedOnNode.java Source code

Java tutorial

Introduction

Here is the source code for TreeViewBasedOnNode.java

Source

import java.util.Vector;

import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;

public class TreeViewBasedOnNode {
    static Display display = new Display();

    static Shell shell = new Shell(display);

    static final Tree tree = new Tree(shell, SWT.BORDER);

    static Vector nodes = new Vector();

    public static void traditional() {
        for (int i = 0; nodes != null && i < nodes.size(); i++) {
            Node node = (Node) nodes.elementAt(i);
            addNode(null, node);
        }
    }

    private static void addNode(TreeItem parentItem, Node node) {
        TreeItem item = null;
        if (parentItem == null)
            item = new TreeItem(tree, SWT.NONE);
        else
            item = new TreeItem(parentItem, SWT.NONE);

        item.setText(node.getName());

        Vector subs = node.getSubCategories();
        for (int i = 0; subs != null && i < subs.size(); i++)
            addNode(item, (Node) subs.elementAt(i));
    }

    public static void main(String[] args) {
        Node category = new Node("A", null);
        nodes.add(category);

        category = new Node("a1", category);
        new Node("a11", category);
        new Node("a12", category);

        category = new Node("B", null);
        nodes.add(category);

        new Node("b1", category);
        new Node("b2", category);

        TreeViewer treeViewer = new TreeViewer(tree);

        treeViewer.setContentProvider(new MyTreeContentProvider());

        treeViewer.setLabelProvider(new MyLabelProvider());
        treeViewer.setInput(nodes);
        tree.setSize(300, 200);
        shell.setSize(300, 200);

        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }

}

class MyLabelProvider implements ILabelProvider {
    public String getText(Object element) {
        return ((Node) element).getName();
    }

    public Image getImage(Object arg0) {
        return null;
    }

    public void addListener(ILabelProviderListener arg0) {
    }

    public void dispose() {
    }

    public boolean isLabelProperty(Object arg0, String arg1) {
        return false;
    }

    public void removeListener(ILabelProviderListener arg0) {
    }
}

class MyTreeContentProvider implements ITreeContentProvider {
    public Object[] getChildren(Object parentElement) {
        Vector subcats = ((Node) parentElement).getSubCategories();
        return subcats == null ? new Object[0] : subcats.toArray();
    }

    public Object getParent(Object element) {
        return ((Node) element).getParent();
    }

    public boolean hasChildren(Object element) {
        return ((Node) element).getSubCategories() != null;
    }

    public Object[] getElements(Object inputElement) {
        if (inputElement != null && inputElement instanceof Vector) {
            return ((Vector) inputElement).toArray();
        }
        return new Object[0];
    }

    public void dispose() {
    }

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
    }
}

class Node {
    private String name;

    private Vector subCategories;

    private Node parent;

    public Node(String name, Node parent) {
        this.name = name;
        this.parent = parent;
        if (parent != null)
            parent.addSubCategory(this);
    }

    public Vector getSubCategories() {
        return subCategories;
    }

    private void addSubCategory(Node subcategory) {
        if (subCategories == null)
            subCategories = new Vector();
        if (!subCategories.contains(subcategory))
            subCategories.add(subcategory);
    }

    public String getName() {
        return name;
    }

    public Node getParent() {
        return parent;
    }
}