各位朋友,我有一个关于树的问题请教:
我想用一个文本文件中的内容来初始化一个树型目录,其文本文件的内容如下:
History Library
Science Library
America History
China History
Chemistry Science
Physics Science
我想生成的树为:
Library--
---History
--Armerica
--China
---Science
--Chemistry
--Physics
即以文本文件的每行的第一列为子节点,第二列为父节点,根节点为Library
我所用的方法如下(但实现不了,请各位指教):
ArrayList parent = new ArrayList();
ArrayList child = new ArrayList();
BufferedReader in = new BufferReader(new FileReader(file));//file即为文本文件。
String line = null;
StringTokenizer st;
while((line = in.readLine())!=null)
{
if(line.trim().length() != null) //忽略空行
{
st = new StringTokenizer(line);
child.add(st.nextToken()); //第一列为子节点
parent.add(st.nextToken());//第二列为父节点
}
}
in.close();
HashMap parentMap = new HashMap();
//create root
DefaultMutableTreeNode root = new DefaultMutableTreeNode(parent.get(0));
DefaultTreeModel treeModel = new DefaultTreeModel(root);
parentMap.put(child.get(0),root);
DefaultMutableTreeNode node,parentNode;
for(int i = 0; i < parent.size(); i++)
{
//首先通过HashMap的get()方法得到父节点。
parentNode = (DefaultMutableTreeNode)parentMap.get(child.get(i));
//取得子节点
node = new DefaultMutableTreeNode(child.get(i));
// 插入子节点
treeModel.insertNodeInto(node,parentNode,parentNode.getChildCount());
//赋HashMap的下一个值,以方便在下一循环中用get()方法取数
parentMap.put(child.get(i+1),parent.get(i+1));
}
用上述方法,只能生成如下的一棵树:
Library---
--History
别的节点就不能生成了,请问这个问题是出在哪里???
10 个解决方案
parentMap.get(child.get(i));的是String类型,类型不匹配.
见:parentMap.put(child.get(i+1),parent.get(i+1));
那如果我把parentMap.put(child.get(i+1),parent.get(i+1));语句前加上如下语我句:
parentNode = new DefaultMutableNode(parent.get(i+1));
然后再将parentMap.put(child.get(i+1),parent.get(i+1));换成
parentMap.put(child.get(i+1),parentNode)这样类型应该匹配了吧,但为什么还是不行呢?
对不起,DefaultMutableTreeNode我写成DefaultMutableNode了.
看:parentMap.put(child.get(i+1),parent.get(i+1));
当i=parent.size()-1;时,parent.get(i+1))会有错!
你的程序结构太差,看得人眼花缭乱
cooled:感谢你的指教,我是一个java的初学者,有许多问题还请多多指教。至于程序结构方面,我会慢慢的加以改变。
对于这个问题,的确当i=parent.size()-1;时,parent.get(i+1)会出错,但我想之所以不会生成正确的结果,问题不是出在这一点上,因为即使我暂时不取i=parent.size()-1这个数,即将i<parent.size()改为i<parent.size()-1。也不会得到正确的结果。
能不能请cooled兄再帮小弟指点一下。
你的思路本来就存在问题:
给我信箱,一会给你个例子
谢谢gefy,我的信箱是:dengcq@dlwewin.com
// 插入子节点
treeModel.insertNodeInto(node,parentNode,parentNode.getChildCount());
这句话好像有问题,你试一下这个
treeModel.insertNodeInto(node,parentNode,i+1);