This is an old revision of the document!
JTree
Populating Tree
public class TestPane extends JPanel { private DefaultTreeModel model; private JTree tree; public TestPane() { setLayout(new BorderLayout()); tree = new JTree(); File rootFile = new File("."); DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootFile); model = new DefaultTreeModel(root); tree.setModel(model); tree.setRootVisible(true); tree.setShowsRootHandles(true); add(new JScrollPane(tree)); JButton load = new JButton("Load"); add(load, BorderLayout.SOUTH); load.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot(); root.removeAllChildren(); model.reload(); File rootFile = (File) root.getUserObject(); addFiles(rootFile, model, root); tree.expandPath(new TreePath(root)); } }); } protected void addFiles(File rootFile, DefaultTreeModel model, DefaultMutableTreeNode root) { for (File file : rootFile.listFiles()) { DefaultMutableTreeNode child = new DefaultMutableTreeNode(file); model.insertNodeInto(child, root, root.getChildCount()); if (file.isDirectory()) { addFiles(file, model, child); } } } }
Reference: https://stackoverflow.com/questions/15215578/how-to-build-a-jtree-dynamically
File List in Tree
package com.ggl.testing; import java.io.File; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.SwingUtilities; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; public class FileBrowser implements Runnable { private DefaultMutableTreeNode root; private DefaultTreeModel treeModel; private JTree tree; @Override public void run() { JFrame frame = new JFrame("File Browser"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); File fileRoot = new File("C:/"); root = new DefaultMutableTreeNode(new FileNode(fileRoot)); treeModel = new DefaultTreeModel(root); tree = new JTree(treeModel); tree.setShowsRootHandles(true); JScrollPane scrollPane = new JScrollPane(tree); frame.add(scrollPane); frame.setLocationByPlatform(true); frame.setSize(640, 480); frame.setVisible(true); CreateChildNodes ccn = new CreateChildNodes(fileRoot, root); new Thread(ccn).start(); } public static void main(String[] args) { SwingUtilities.invokeLater(new FileBrowser()); } public class CreateChildNodes implements Runnable { private DefaultMutableTreeNode root; private File fileRoot; public CreateChildNodes(File fileRoot, DefaultMutableTreeNode root) { this.fileRoot = fileRoot; this.root = root; } @Override public void run() { createChildren(fileRoot, root); } private void createChildren(File fileRoot, DefaultMutableTreeNode node) { File[] files = fileRoot.listFiles(); if (files == null) return; for (File file : files) { DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(new FileNode(file)); node.add(childNode); if (file.isDirectory()) { createChildren(file, childNode); } } } } public class FileNode { private File file; public FileNode(File file) { this.file = file; } @Override public String toString() { String name = file.getName(); if (name.equals("")) { return file.getAbsolutePath(); } else { return name; } } } }
References: https://stackoverflow.com/questions/23804675/list-files-and-directories-with-jtree-and-file-in-java