使用jdom操作xml数据,生成含Jtree的applet

dom|xml|数据

转自:http://www.softhouse.com.cn/html/200410/2004102517145700001335.html

使用jdom操作xml数据,生成含Jtree的applet
    在我们工作中,常常会碰到树形组件的生成问题,如果你在开发web application,纯粹使用javascript来生成树形组件是非常繁琐的,而且交互性也不不太好。所以许多产品使applet来实现树形组件的功能。比如说,weblogic,jboss等产品的console.所以,把树形数据组织成xml文件,用jdom剖析它,最后生成applet就非常有通用的意义。下面,我就给出一个例子,抛砖引玉。1.准备一个存有属性数据的xml文件,把它放在classpath中,我这里是org.xml。[pre]<?xml version="1.0" encoding="UTF-8"?><!--Sample XML file generated by XMLSPY v5 rel. 3 U (http://www.xmlspy.com)--><node xmlns="http://www.javabox.com/schemas/org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.javabox.com/schemas/orgE:\myDemo\org.xsd" name="组织机构" id="-1" desc="" link="#">    <node name="总经理" id="1" desc="" link="#">        <node name="管理副总经理" id="2" desc="" link="#"/>        <node name="生产副总经理" id="3" desc="" link="#">            <node name="项目部" id="7" desc="" link="#"/>            <node name="机械公司" id="8" desc="" link="#"/>            <node name="贝盟公司" id="9" desc="" link="#"/>            <node name="洛斯韦公司" id="9" desc="" link="#"/>        </node>        <node name="总工程师" id="4" desc="" link="#"/>        <node name="总会计师" id="5" desc="" link="#"/>        <node name="总经济师" id="6" desc="" link="#"/>    </node></node>[/pre]2.确保你可以使用jdom解析器,你如果没有可以去这里下载。3.用于代表树结点节点的javabean,TreeNode.javapackage com.javabox.jtree;public class TreeNode{  private String id;  private String name;  private String link;  public TreeNode(String id,String name,String link){    this.id=id;    this.name=name;    this.link=link;  }  public String getId(){    return id;  }  public void setId(String Id){    this.id=Id;  }  public void  setName(String Name){    this.name=Name;  }  public String getName(){    return name;  }  public String toString(){    return  name;  }  public String getLink(){    return link;  }  public void setLink(String link){    this.link=link;  }}4.自己写的TreeCellRenderer,IconRender.javapackage com.javabox.jtree;import javax.swing.*;import java.awt.*;import javax.swing.tree.*;import javax.swing.tree.DefaultTreeCellRenderer;class IconRender    extends DefaultTreeCellRenderer {  //你需要替换成你的icon  public static final Icon leafSelectedIcon = new ImageIcon("greeball.JPG");  public static final Icon leafUnSelectedIcon = new ImageIcon("greyball.JPG");  public static final Icon folderOpen = new ImageIcon("folderopen.JPG");  public static final Icon folderClose = new ImageIcon("folderclose.JPG");  public Component getTreeCellRendererComponent(JTree tree,                                                Object value,                                                boolean selected,                                                boolean expanded,                                                boolean leaf,                                                int row,                                                boolean hasFocus) {    super.getTreeCellRendererComponent(tree, value, selected, expanded,                                       leaf, row, hasFocus);    if (leaf && selected) {      setIcon(IconRender.leafSelectedIcon);    }    else if (leaf) {      setIcon(IconRender.leafUnSelectedIcon);    }    return this;  }  public IconRender() {    super();    this.setLeafIcon(leafUnSelectedIcon);    this.setOpenIcon(folderOpen);    this.setClosedIcon(folderClose);  }}5.AppletTree.java,该文件解析xml文件,生成含Jtree的applet,你可以把它嵌入到jsp,html文件中使用,也可以直接运行该文件。package com.javabox.jtree;import javax.swing.event.*;import java.awt.*;import java.applet.*;import javax.swing.*;import javax.swing.tree.*;import java.awt.event.*;import org.jdom.*;import org.jdom.input.*;import java.io.*;import java.util.*;import java.awt.*;import javax.swing.*;import javax.swing.border.*;import javax.swing.plaf.*;import javax.swing.plaf.basic.*;import javax.swing.plaf.metal.*;import java.io.*;import netscape.javascript.*;public class AppletTree extends Applet implements TreeSelectionListener{  private JTree tree;  private TreePath path;  private Panel topPanel;  private DefaultMutableTreeNode top;  private DefaultMutableTreeNode clicknode;  private String link;  public AppletTree(){  }  public void init(){    try{    super.init();    this.setLayout(new GridLayout(1,1));    tree=createTree(new FileInputStream("org.xml"));    tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);    tree.putClientProperty("JTree.lineStyle","Angled");    tree.setShowsRootHandles(true);    tree.setEditable(false);    tree.addTreeSelectionListener( this );    IconRender render=new IconRender();    tree.setCellRenderer(render);    topPanel=new Panel(new BorderLayout());    topPanel.add(tree);    this.add(topPanel);    }catch(Exception e){      e.printStackTrace();    }  }  public JTree createTree(InputStream is){    SAXBuilder builder = new SAXBuilder();    try {      Document doc = builder.build(is);      Element root=doc.getRootElement();      TreeNode rootNode=new TreeNode(root.getAttributeValue("id"),root.getAttributeValue("name"),root.getAttributeValue("link"));      top=new DefaultMutableTreeNode(rootNode);      addNode(root,top);    }  catch (Exception ex) {      ex.printStackTrace();    }    //你可以在这里改变jtree中连线的颜色,我请教国外的高手才找到的,很酷的哦:)    UIManager.put( "Tree.hash", new ColorUIResource(Color.red) );    return new JTree(top);  }  /**   *   * @param e 待加入树种的jdom元素   * @param rootNode 树根节点   */  private void addNode(Element e,DefaultMutableTreeNode rootNode){    String id=e.getAttributeValue("id");    String name=e.getAttributeValue("name");    String link=e.getAttributeValue("link");    TreeNode node=new TreeNode(id,name,link);    //如有父节点    Element father=e.getParent();    if(father!=null){      String fid=father.getAttributeValue("id");      DefaultMutableTreeNode fatherNode=getTreeNode(fid,rootNode);      if(fatherNode!=null){        fatherNode.add(new DefaultMutableTreeNode(node));      }    }    //如有子节点    Iterator it=e.getChildren().iterator();    while(it.hasNext()){      Element child=(Element)it.next();      addNode(child,rootNode);    }  }  /**   * 根据id,查找树节点,//广度优先   * @param id 节点id   * @param rootNode 树根节点   * @return DefaultMutableTreeNode   */  private DefaultMutableTreeNode getTreeNode(String id,DefaultMutableTreeNode rootNode){    DefaultMutableTreeNode returnNode=null;    if(rootNode!=null){      Enumeration enum=rootNode.breadthFirstEnumeration();      while(enum.hasMoreElements()){        DefaultMutableTreeNode temp=(DefaultMutableTreeNode)enum.nextElement();        TreeNode node=(TreeNode)temp.getUserObject();        if(node.getId().equals(id)){          returnNode=temp;          break;        }      }    }    return returnNode;  }  public void valueChanged( TreeSelectionEvent event ){    if( event.getSource() == tree ){      path = event.getPath();      clicknode=(DefaultMutableTreeNode)path.getLastPathComponent();      Object uo=clicknode.getUserObject();      if(uo instanceof TreeNode){        TreeNode nd=(TreeNode)clicknode.getUserObject();        link=nd.getLink();      }      //调用一个javascript函数; //      JSObject.getWindow (this).eval ("javascript:window.open('"+link+"')") ;    }  }  public static  void main(String[] args ){    JFrame frame=new JFrame("test");    AppletTree tree=new AppletTree();    tree.init();    frame.getContentPane().add(tree);    frame.setSize(600,600);    frame.show();  }}6.运行一个这个类,是不是很cool哦,你还可以把它嵌在网页中,调用javasript函数,达到刷新页面的目的。

时间: 2024-10-30 19:10:43

使用jdom操作xml数据,生成含Jtree的applet的相关文章

Dreamweaver8新功能:建立XSLT页可视化操作XML数据

dreamweaver|dreamweaver8|xml|数据 开言DW8这个新的功能究竟好在哪里?这不得不先说了一些令初学者感到犯晕的多个技术名词.但注意:本文主要是进行例题的过程说明,您可以按照步骤很轻松地完成本案项目.不过终究会在操作进行时会遇到一些概念,这里先预介绍,内容只做概要,相关具体内容可搜索参考详细.先说XML这是什么?越来越多的站点开始应用了XML,最常见的就是各个BLOG中存在RSS.SO,现在出现了两个技术名词:XML和RSS.· 请大家多动手,多看多观察如下几个站点的RS

JDOM操作XML文件(法老修正版)

dom|xml 原文:JDOM操作XML文件地址:http://www.jspcn.net/htmlnews/200120272.html---------------------------------------------------------------------------    这篇文章讲的不错~把JDOM的基本操作实例化了,不过由于当时的作者用的JDOM版本还比较陈旧,所以部分代码会编译出错!支持中文也不好!所以,法老在原作者的基础上对程序做了修改!休正了编译出错以及中文乱码的

[JAVA100例]071、使用JDOM操作XML

import org.jdom.*; import org.jdom.output.*; import java.io.*; import java.util.List; /** * <p>Title: 使用JDOM操作XML文件.</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Filename: JDOMOption.java

JDOM操作XML文档

  解析 xml文档的接口技术有很多 ,DOM  JDOM  SAX  ..其中JDOM技术是最简单的操作,代码操作比DOM  SAX少很多 . 关于这三种技术的介绍可以去网上查询一下. SAX是基于事件响应的 (没用过) . DOM是java官方的标准,我们在操作xml的时候其实是在内存中构建了一棵文档树,对于较小的xml文档可以使用dom处理,但是对于数据量比较大的XML文档,DOM比较耗费内存. JDOM是一个开源的项目,融合了DOM和SAX技术 ,轻量级的API可以方便的操作XML文档,

利用Visual Basic操作XML数据

visual|xml|数据 什么是XML 扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用. XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引.排序.查找.相关一致性等,XML仅仅是展示数据.事实上XML与其他数据表现形式最大的不同是:他极其简单.这是一个看上去有点琐细的优点,但正是

利用VisualBasic操作XML数据

visual|xml|数据 什么是XML 扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用. XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引.排序.查找.相关一致性等,XML仅仅是展示数据.事实上XML与其他数据表现形式最大的不同是:他极其简单.这是一个看上去有点琐细的优点,但正是

sql server中使用T-Sql操作Xml数据

一.前言 SQLServer 2005 引入了一种称为 XML 的本机数据类型.用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列:此外,还允许带有变量和参数.为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB). 用户将一个XML数据存入数据库的时候,可以使用这个XML的字符串,SQL Server会自动的将这个字符串转化为XML类型,并存储到数据库中. 随着SQL Server 对XML字段的支持,相应的,T-S

JDOM操作XML文档高级篇XML验证,创建带名字空间的xml, xml文档的修改

下面我通过几个例子来实现JDOM来操作XML文档: 1. xml文档的验证 DTD   我们经常使用XML来验证文档的合法性.  我们需要在xml的开头引入  <!DOCTYPE rootName SYSTEM "xxx.dtd">   这里的PUBLIC 引入的是私有DTD也就是我们自己定义的 .我们平时使用这种即可 . 另一种是   <!DOCTYPE rootName PUBLIC  ".........">这个是ISO标准的DTD 

Java操作XML动态生成级联菜单

Menu.JSP源码 menu .btn input{ background:#FF6600; border-left:1px #FFFFFF solid; border-top:1px #FFFFFF solid; border-right:1px #990000 solid; border-bottom:1px #990000 solid; padding-top:4px; color:#FFFFFF; } function newItem(ele){ var pNode; var pdiv