import java.awt.BorderLayout;
import java.awt.Container;
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);
}
}