|
Oct
08
|
A JTree can be used for displaying trees in Swing. The data can be first loaded into a DefaultTreeModel (where is node is represented by a DefaultMutableTreeNode) for rendering by the JTree.
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.TreeMap;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.MutableTreeNode;
import javax.swing.tree.TreeModel;
public class FolderTree
{
public static void main(String[] args)
{
// Generate some test data
// We'll use a Map which is keyed on folder name
// With each folder name referencing a list of
// strings containing children names
Random seed = new Random();
Map<String, List<String>> folders =
new TreeMap<String, List<String>>();
for (char c = 'A'; c<='G'; c++)
{
List<String> children = new ArrayList<String>();
for (int i=0; i<seed.nextInt(3); i++)
{
children.add(Integer.toString(i));
}
folders.put(Character.toString(c), children);
}
// Now we create TreeModel and
// populate it with our test data
DefaultMutableTreeNode root =
new DefaultMutableTreeNode("FOLDERS");
TreeModel treeModel = new DefaultTreeModel(root, true);
for (String folderName : folders.keySet())
{
// Create a node for the folder
DefaultMutableTreeNode folder =
new DefaultMutableTreeNode(folderName, true);
for (String childName : folders.get(folderName))
{
// Add child to the folder
MutableTreeNode child =
new DefaultMutableTreeNode(childName, false);
folder.add(child);
}
root.add(folder);
}
// Create a frame with JTree displaying our data
JFrame frame = new JFrame("Folder Tree");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Pass the previously create model to our tree
JTree tree = new JTree(treeModel);
frame.add(new JScrollPane(tree));
frame.pack();
frame.setVisible(true);
}
}



Recent Comments