java – 从堆创建JTree
建立
我有一个堆有intLevels级别和e元素(两个整数)存储在一个2D数组对象,heapArray,它是intLevels高和Math.pow(2,intLevels)宽.出于假设目的,假设我输入1,2,3,4,5,6,7,8和9.堆将看起来像这样: 9 8 6 7 3 2 5 1 4 如果你用一系列java.util.Arrays.toString(Object [] a)打印它,它看起来像这样: [9,null,null] [8,null] [7,null] [1,null] 有没有人知道如何获取这些信息并从中创建一个JTree?对于任何不知道的人来说,JTree的工作方式与链表非常相似.您有一个根节点可以添加更多节点,您可以在这些节点上添加其他节点.我知道一个事实,如果我正在处理的唯一堆是这个,我将能够以这种方式创建树: jTree = new javax.swing.JTree(); treeNode1 = new javax.swing.tree.DefaultMutableTreeNode(9); treeNode2 = new javax.swing.tree.DefaultMutableTreeNode(8); treeNode3 = new javax.swing.tree.DefaultMutableTreeNode(7); treeNode4 = new javax.swing.tree.DefaultMutableTreeNode(1); treeNode3.add(treeNode4); treeNode4 = new javax.swing.tree.DefaultMutableTreeNode(4); treeNode3.add(treeNode4); treeNode2.add(treeNode3); treeNode3 = new javax.swing.tree.DefaultMutableTreeNode(3); treeNode2.add(treeNode3); treeNode1.add(treeNode2); treeNode2 = new javax.swing.tree.DefaultMutableTreeNode(6); treeNode3 = new javax.swing.tree.DefaultMutableTreeNode(2); treeNode2.add(treeNode3); treeNode3 = new javax.swing.tree.DefaultMutableTreeNode(5); treeNode2.add(treeNode3); treeNode1.add(treeNode2); jTree.setModel(new javax.swing.tree.DefaultTreeModel(treeNode1)); 这导致树看起来像: 9 ├8 │├7 ││├1 ││└4 │└3 └6 ├2 └5 编辑 我发现实现了答案的buildTree(List< Object []>)方法: java.util.List<Object[]> objectArrays = new java.util.ArrayList<Object[]>(); objectArrays.addAll(Arrays.asList(heapArray)); jTree1 = buildTree(objectArrays); 它似乎仍然不起作用;树仍然是空的. 题 有没有人知道一个相对简单而灵活的方法,使这个2D数组成为一个具有给定信息的JTree?如果正确实现,向这个树/堆/数组输入1,8和9应该与我上面显示的具体方法结果相同. 解决方法
这个课应该可以解决问题.我已经使用递归来允许任意数量的子级别(假设有足够的对象数组和对象来支持树).
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}; Object[] array2 = {8,null}; Object[] array3 = {7,null}; Object[] array4 = {1,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); 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,(itemIndex * 2) + 1); if(childNode != null) { node.add(childNode); } } } } return node; } } 结果是: 9 8 7 1 2 3 6 2 5 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- SpringMVC开发restful API之用户查询代码详解
- java – 找出使用给定API的哪些类
- Java break语句详解
- java 继承访问成员变量
- java – 为什么maven-assembly-plugin多次在我的zip中放置相
- MessagePack Java Jackson Dataformat - Map 的序列化和反序
- java – 必须在GetStringUTFChars之后调用ReleaseStringUTF
- java – 没有方法参数直接调用cfc时ColdFusion内存泄漏
- 从Mathematica到Java的图像
- java – 无法从Netbeans 8.0.1服务区域内启动GlassFish 4.1