这门课应该能做到。我使用递归允许任意数量的子级别(假设有足够的对象数组和对象来支持树)。
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
public class TreeBuilder {
public static void main(final String[] args) {
// build the list of object arrays
List<Object[]> objectArrays = new ArrayList<Object[]>();
Object[] array1 = {9, null, null, null, null, null, null, null};
Object[] array2 = {8, 6, null, null, null, null, null, null};
Object[] array3 = {7, 3, 2, 5, null, null, null, null};
Object[] array4 = {1, 2, null, null, null, null, null, null};
objectArrays.add(array1);
objectArrays.add(array2);
objectArrays.add(array3);
objectArrays.add(array4);
// call the method under test
JTree result = buildTree(objectArrays);
// print the results
if(result == null) {
System.out.println("FAIL: returned null.");
} else {
recursePrintTree((DefaultMutableTreeNode)result.getModel().getRoot(), 0);
}
}
public static void recursePrintTree(
final DefaultMutableTreeNode treeNode,
final int indentation) {
// print the indentation spaces
for(int index = 0; index < indentation; index++) {
System.out.print(" ");
}
// print the value of the node
System.out.println(treeNode.getUserObject());
// enumerate the children of the node
Enumeration enumeration = treeNode.children();
while(enumeration.hasMoreElements()) {
DefaultMutableTreeNode child =
(DefaultMutableTreeNode)enumeration.nextElement();
recursePrintTree(child, indentation + 1);
}
}
public static JTree buildTree(final List<Object[]> objectArrays) {
JTree jTree = new JTree();
DefaultMutableTreeNode node = recurseBuildTree(objectArrays, 0, 0);
if(node != null) {
jTree.setModel(new DefaultTreeModel(node));
}
return jTree;
}
private static DefaultMutableTreeNode recurseBuildTree(
final List<Object[]> objectArrays,
final int objectArrayIndex,
final int itemIndex) {
DefaultMutableTreeNode node = null;
if(objectArrayIndex < objectArrays.size()) {
Object[] objectArray = objectArrays.get(objectArrayIndex);
if(itemIndex < objectArray.length) {
Object obj = objectArray[itemIndex];
if(obj != null) {
node = new DefaultMutableTreeNode(obj);
DefaultMutableTreeNode childNode = recurseBuildTree(
objectArrays, objectArrayIndex + 1, itemIndex * 2);
if(childNode != null) {
node.add(childNode);
}
childNode = recurseBuildTree(
objectArrays, objectArrayIndex + 1, (itemIndex * 2) + 1);
if(childNode != null) {
node.add(childNode);
}
}
}
}
return node;
}
}
结果是:
9
8
7
1
2
3
6
2
5