Java Swing How to - Assign DefaultMutableTreeNode to JTree








Question

We would like to know how to assign DefaultMutableTreeNode to JTree.

Answer

import java.awt.BorderLayout;
import java.awt.Container;
//from w  w w  .  j  a  v a  2s .com
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

public class Main extends JFrame {
  public static void main(String[] args) {
    new Main();
  }

  public Main() {
    Container content = getContentPane();
    Object[] hierarchy = {
        "javax.swing",
        "javax.swing.border",
        "javax.swing.colorchooser",
        "javax.swing.event",
        "javax.swing.filechooser",
        new Object[] { "javax.swing.plaf", "javax.swing.plaf.basic",
            "javax.swing.plaf.metal", "javax.swing.plaf.multi" },
        "javax.swing.table",
        new Object[] {
            "javax.swing.text",
            new Object[] { "javax.swing.text.html",
                "javax.swing.text.html.parser" }, "javax.swing.text.rtf" },
        "javax.swing.tree", "javax.swing.undo" };
    DefaultMutableTreeNode root = processHierarchy(hierarchy);
    JTree tree = new JTree(root);
    content.add(new JScrollPane(tree), BorderLayout.CENTER);
    setSize(275, 300);
    setVisible(true);
  }
  private DefaultMutableTreeNode processHierarchy(Object[] hierarchy) {
    DefaultMutableTreeNode node = new DefaultMutableTreeNode(hierarchy[0]);
    DefaultMutableTreeNode child;
    for (int i = 1; i < hierarchy.length; i++) {
      Object nodeSpecifier = hierarchy[i];
      if (nodeSpecifier instanceof Object[]) //  node with children
        child = processHierarchy((Object[]) nodeSpecifier);
      else
        child = new DefaultMutableTreeNode(nodeSpecifier); //  Leaf
      node.add(child);
    }
    return (node);
  }
}