前不久,导师让我们写个小程序,生成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表明是否需要显示!就使用子节点保存其属性!这样,在生成的时候需要判断当前操作的节点的类型,叶子节点,中间节点,其他节点(节点属性)!
分享到:
相关推荐
使用XML配置的优点在于它与编程语言无关,易于编辑和维护,同时也方便了程序解析和生成菜单结构。 **多级目录树**: 多级目录树是指菜单结构中包含多个层级的树形结构。这种结构使得复杂的菜单系统能够有条理地呈现...
这可能涉及到监听`JTree`的选择事件,然后根据选中节点的数据生成`JTable`的行。这通常通过实现`TreeSelectionListener`接口并重写`valueChanged`方法来完成。 `JTextPane`和`JSplitPane`是额外提及的两个组件。`...
Java XML Editor通过解析XML文档来生成JTree结构,这可能涉及到DOM(文档对象模型)、SAX(简单API for XML)或StAX(流式API for XML)解析器。 - **DTD(文档类型定义)与XSD(XML Schema)**:XML文档可能需要...
### Swing界面设计之JTree知识点总结 #### (一) Spring 开发 Swing GUI 简介——依赖注入和富客户端 **关于本教程** 本节主要介绍如何利用Spring框架结合Swing来开发图形用户界面(GUI),并通过依赖注入来增强...
它简化了数据库操作,通过将Java类与数据库表关联,自动处理SQL语句的生成和执行。Hibernate提供了一种在Java对象和关系数据库之间进行无缝转换的方式,降低了开发人员处理数据库的复杂性,提高了开发效率。 ...
2. **JSP**:后端生成动态内容,处理XML数据并返回给jTree。 3. **XML**:数据容器,存储树节点的信息。 4. **Servlet**:可能用作数据提供者,处理HTTP请求并返回XML或JSON数据。 5. **WAR**文件:Java Web应用的...
javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释...
javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释。...
javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释...
javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释...
javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释...
javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释。...
2. **JSP(JavaServer Pages)**: JSP是Java Web开发中的视图层技术,用于生成动态HTML、XML或其他格式的文档。在动态树形结构中,JSP可以用来接收和处理用户请求,生成包含树形结构的HTML,通过JavaScript或AJAX...
javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释。...
javax.xml 根据 XML 规范定义核心 XML 常量和功能。 javax.xml.bind 为包含解组、编组和验证功能的客户端应用程序提供运行时绑定框架。 javax.xml.bind.annotation 定义将 Java 程序元素定制成 XML 模式映射的注释...
在"jaxb2 demo"中,开发者可能会展示如何利用JAXB 2.0的注解来定义XML映射,如何生成和解析XML文档,以及如何在实际项目中应用这些技术。通过这样的示例,学习者可以深入理解JAXB的工作原理,以及它如何简化Java程序...