The data structure is exactly same as shown in picture, depth of tree will varies depending upon the no of records.
So, conceptually, you want to append the child node to the previous child node.
This could be done using a simple recursive method, simular to...
protected void populate(DefaultMutableTreeNode parent, List<String> items, int index) {
if (index >= items.size()) {
return;
}
DefaultMutableTreeNode node = new DefaultMutableTreeNode(items.get(index));
parent.add(node);
populate(node, items, ++index);
}
or even more directly via a simple for-loop
...
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(items.get(0));
DefaultMutableTreeNode parentNode = rootNode;
for (int index = 1; index < items.size(); index++) {
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(items.get(index));
parentNode.add(childNode);
parentNode = childNode;
}
Runnable example

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
public class Main {
public static void main(String[] args) {
new Main();
}
public Main() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
public class TestPane extends JPanel {
public TestPane() throws IOException {
setLayout(new BorderLayout());
JTree tree = new JTree();
tree.setShowsRootHandles(true);
List<String> items = new ArrayList<>(32);
items.add("Bill of materials (BOM) SANDBOX");
items.add("00550R1020AROI_Straightening");
items.add("00815R1214ARPP");
items.add("01400R1030ARDWN");
items.add("01400R1030ARDWN");
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(items.get(0));
populate(rootNode, items, 1);
DefaultTreeModel model = new DefaultTreeModel(rootNode);
tree.setModel(model);
add(new JScrollPane(tree));
}
protected void populate(DefaultMutableTreeNode parent, List<String> items, int index) {
if (index >= items.size()) {
return;
}
DefaultMutableTreeNode node = new DefaultMutableTreeNode(items.get(index));
parent.add(node);
populate(node, items, ++index);
}
}
}