根据XML生成JTree

前不久,导师让我们写个小程序,生成JTree然后将其保存为XML,然后以后根据XML生成JTree,希望写的灵活点,以后要用!我负责根据JTree生成XML,而另外的男生负责根据XML生成JTree!今天要用到这个小程序,结果根据XML生成JTree这里有问题了!没办法,赶快重新写!ps:麻烦看他写的,还不如自己重新写了!
其实比较简单

具体的对节点分析判断的函数如下:
	private void generateNodeAccordingXML(NodeList result_nl,
DefaultTreeModel treeModel, DefaultMutableTreeNode parentNode) {
try {
for(int i=0; i<result_nl.getLength(); i++){
//得到当前的子节点
Node childNode = result_nl.item(i);
//当前节点是叶子节点
if(childNode.getNodeName().equals("LeafNode")){
NodeList cchildNode = childNode.getChildNodes();
String leafName = childNode.getNodeName();
Map<String, Vector<Object>> propertiesMap = new HashMap<String, Vector<Object>>();
System.out.print("Current Node:"+childNode.getNodeName());
for(int j=0; j<cchildNode.getLength(); j++){
Node propertyNode = cchildNode.item(j);
if(propertyNode==null)
return ;
NamedNodeMap map = propertyNode.getAttributes();
if(map==null)
return ;
Vector<Object> value = new Vector<Object>();
String name = propertyNode.getNodeName();
String value1 = map.getNamedItem(name).getNodeValue();
String value2 = map.getNamedItem("IsShow").getNodeValue();
value.add(0, value1);
value.add(1, value2);
propertiesMap.put(name, value);
}
System.out.println("-----Property:"+propertiesMap);
DefaultMutableTreeNode cpNode = new DefaultMutableTreeNode(
new LeafNode(leafName, propertiesMap));
treeModel.insertNodeInto(cpNode, parentNode, parentNode.getChildCount());
}//当前节点是中间节点

if(childNode.getNodeName().equals("MiddleNode")){
NodeList cchildNode = childNode.getChildNodes();
String middleName = childNode.getNodeName();
Map<String, Vector<Object>> propertiesMap = new HashMap<String, Vector<Object>>();
System.out.print("Current Node:"+childNode.getNodeName());
for(int j=0; j<cchildNode.getLength(); j++){
Node propertyNode = cchildNode.item(j);
if( (propertyNode.getNodeName().equals("MiddleNode")|| propertyNode.getNodeName().equals("LeafNode") )){
continue;
}
NamedNodeMap map = propertyNode.getAttributes();
Vector<Object> value = new Vector<Object>();
String name = propertyNode.getNodeName();
String value1 = map.getNamedItem(name).getNodeValue();
String value2 = map.getNamedItem("IsShow").getNodeValue();
value.add(0, value1);
value.add(1, value2);
propertiesMap.put(name, value);
}
System.out.println("-----Property:"+propertiesMap);
DefaultMutableTreeNode cpNode = new DefaultMutableTreeNode(
new LeafNode(middleName, propertiesMap));
treeModel.insertNodeInto(cpNode, parentNode, parentNode.getChildCount());

this.generateNodeAccordingXML(childNode.getChildNodes(), treeModel, cpNode);
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


调用的时候如下:
result_nl为XMl中root节点的getChildNodes。
generateNodeAccordingXML(result_nl, treeModel, treeRootNode);

XML为:
  <?xml version="1.0" encoding="GB2312" standalone="no" ?> 
- <Root Name="OilField">
- <MiddleNode ID="00001">
<Logo IsShow="false" Logo="image\kb16.gif" />
<name IsShow="true" name="南一/南三油库" />
<NodeType IsShow="false" NodeType="1" />
<ID ID="00001" IsShow="true" />
- <MiddleNode ID="10001">
<Logo IsShow="false" Logo="image\kb16.gif" />
<NodeType IsShow="false" NodeType="1" />
<name IsShow="true" name="一号油管" />
<ID ID="10001" IsShow="true" />
- <MiddleNode ID="20001">
<Logo IsShow="false" Logo="image\kb16.gif" />
<NodeType IsShow="false" NodeType="1" />
<name IsShow="true" name="第一段" />
<ID ID="20001" IsShow="true" />
- <MiddleNode ID="30001">
<Logo IsShow="false" Logo="image\kb16.gif" />
<NodeType IsShow="false" NodeType="1" />
<name IsShow="true" name="首端" />
<ID ID="30001" IsShow="true" />
- <LeafNode ID="40001">
<Logo IsShow="false" Logo="image\kb16.gif" />
<NodeType IsShow="false" NodeType="2" />
<name IsShow="true" name="近端采集点" />
<ID ID="40001" IsShow="false" />
</LeafNode>
- <LeafNode ID="40002">
<Logo IsShow="false" Logo="image\kb16.gif" />
<NodeType IsShow="false" NodeType="2" />
<name IsShow="true" name="远端采集点" />
<ID ID="40002" IsShow="false" />
</LeafNode>
</MiddleNode>
</MiddleNode>
</MiddleNode>
</MiddleNode>
- <MiddleNode ID="00003" Logo="image\kb16.gif" NodeType="1" name="Mid2">
<Logo IsShow="false" Logo="image\kb16.gif" />
<name IsShow="true" name="Mid2" />
<NodeType IsShow="false" NodeType="1" />
<ID ID="00003" IsShow="true" />
</MiddleNode>
</Root>



我们将节点分成两类,中间节点和叶子节点,中间节点可以有子节点,叶子节点不能有!每个节点都有自己的属性,本来打算将属性保存在节点的Attribute里,但是老师说有的属性需要显示出来,但是有的属性不显示,则需要使用IsShow表明是否需要显示!就使用子节点保存其属性!这样,在生成的时候需要判断当前操作的节点的类型,叶子节点,中间节点,其他节点(节点属性)!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值