= 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]]
== File List in JTree ==
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import javax.swing.DefaultListModel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
//...
public class frmMain extends javax.swing.JFrame
{
public frmMain()
{
initComponents();
LaunchWebView();
OpenXmlDataFile();
try {
treeFileList.setModel(new DefaultTreeModel(new DefaultMutableTreeNode("C:\\TEMP"))); // clear existing model
FileUtils.scanAndLoadDirectory("C:\\TEMP", treeFileList);
} catch (Exception exc) {
// Do something
}
}
}
package com.acme.myapp;
import java.io.File;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class FileUtils
{
public static void scanAndLoadDirectory(String location, JTree tree) throws InterruptedException
{
// Creates a file with the location filename
//String location ="C:\\Users\\Ashish Padalkar\\Documents";
File currentDir = new File(location);
// Get root of tree model
DefaultTreeModel modelTree = (DefaultTreeModel)tree.getModel();
DefaultMutableTreeNode root = (DefaultMutableTreeNode) modelTree.getRoot();
displayDirectoryContents(currentDir, modelTree, root);
}
public static void displayDirectoryContents(File dir, DefaultTreeModel model, DefaultMutableTreeNode curRoot) throws InterruptedException
{
File[] files = dir.listFiles(); // Creates array of file type for all the files found
for (File file : files) {
if (file == null) {
System.out.println("NULL directory found");
continue;
}
if (file.isDirectory()) {
//---------------------------
// File is a Directory
//---------------------------
if (file.listFiles() == null) {
// Skip null files
continue;
}
// Adds a new Directory node to tree root
DefaultMutableTreeNode newdir = new DefaultMutableTreeNode(file.getName());
curRoot.add(newdir);
// Refresh the model to show changes
model.reload();
// Recursively calls the function again to explore the contents folder
displayDirectoryContents(file, model, newdir);
} else {
//---------------------------
// File is not a directory
//---------------------------
// Inserts a node newfile under selected node which is the root
DefaultMutableTreeNode selectednode = curRoot;
DefaultMutableTreeNode newfile = new DefaultMutableTreeNode(file.getName());
model.insertNodeInto(newfile, selectednode, selectednode.getChildCount());
// Refresh the model to show the changes
model.reload();
}
}
}
}