Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

import java.awt.Component;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.ToolTipManager;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;

public class Main {
    public static void fillTree(Node parent, int level, String label) {
        for (int i = 0; i < 5; i++) {
            Node node = new Node(label + " " + i);
            parent.addNode(node);
            if (level > 0) {
                fillTree(node, level - 1, label);
            }
        }
    }

    public static void main(String[] args) {
        Node root = new Node("Root");
        fillTree(root, 5, "tree label");
        DefaultTreeModel model = new DefaultTreeModel(root);

        JTree tree = new JTree(model);
        ToolTipManager.sharedInstance().registerComponent(tree);
        tree.setCellRenderer(new MyTreeCellRenderer());
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new JScrollPane(tree));
        f.pack();
        f.setVisible(true);
    }
}

class MyTreeCellRenderer extends DefaultTreeCellRenderer {
    int rendering = 0;

    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
            boolean leaf, int row, boolean hasFocus) {
        Component cell = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
        if (cell instanceof JComponent) {
            ((JComponent) cell).setToolTipText("Hello " + rendering++);
            if (value instanceof Node && cell instanceof JLabel) {
                ((JLabel) cell).setText(((Node) value).name);
            }
        }
        return cell;
    }
}

class Node implements TreeNode {

    private Node parent;
    private List<Node> children;
    public String name;

    public Node(String name) {
        this.name = name;
        this.children = new ArrayList<Node>();
    }

    public void addNode(Node child) {
        children.add(child);
        child.parent = this;
    }

    @Override
    public TreeNode getChildAt(int childIndex) {
        return children.get(childIndex);
    }

    @Override
    public int getChildCount() {
        return children.size();
    }

    @Override
    public Node getParent() {
        return parent;
    }

    @Override
    public int getIndex(TreeNode node) {
        return children.indexOf(node);
    }

    @Override
    public boolean getAllowsChildren() {
        return true;
    }

    @Override
    public boolean isLeaf() {
        return children.size() == 0;
    }

    @Override
    public Enumeration<Node> children() {
        return Collections.enumeration(children);
    }
}