I think DefaultTreeModel#setAsksAllowsChildren(boolean) is what you are looking for.
Sets whether or not to test leafness by asking getAllowsChildren() or isLeaf() to the TreeNodes. If newValue is true, getAllowsChildren() is messaged, otherwise isLeaf() is messaged.

import java.awt.*;
import javax.swing.*;
import javax.swing.tree.*;
public class AsksAllowsChildrenTest {
private JComponent makeUI() {
DefaultTreeModel model = makeDefaultTreeModel();
model.setAsksAllowsChildren(true);
JPanel p = new JPanel(new GridLayout(1, 2));
p.add(new JScrollPane(new JTree(makeDefaultTreeModel())));
p.add(new JScrollPane(new JTree(model)));
return p;
}
private static DefaultTreeModel makeDefaultTreeModel() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("c:/root");
DefaultMutableTreeNode dir;
dir = new DefaultMutableTreeNode("dir1");
root.add(dir);
dir.add(new DefaultMutableTreeNode("file1", false));
dir.add(new DefaultMutableTreeNode("file2", false));
dir = new DefaultMutableTreeNode("dir2");
root.add(dir);
return new DefaultTreeModel(root);
}
public static void main(String... args) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
public static void createAndShowGUI() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.getContentPane().add(new AsksAllowsChildrenTest().makeUI());
f.setSize(320, 240);
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
TreeNode#isLeafneeds to returnfalse, regardless of what might in the directory. You need to add aTreeExpansionListenerto theJTreeand monitor fortreeExpandedevents, at which time you need to populate the node... - MadProgrammer