快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

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


转自: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函数,达到刷新页面的目的。



返回类别: 教程
上一教程: 利用Java实现串口全双工通讯
下一教程: java 应用程序 标题栏图标 的 自定义 方式

您可以阅读与"使用jdom操作xml数据,生成含Jtree的applet"相关的教程:
· 在JSP开发中使用JDOM解析临时存放数据的XML文件
· 教您迅速上手使用JDOM处理XML文档的技巧
· 关于如何使用JdbcTemplate实现在WebLogic812,Oracle9i上的CLOB数据的写操作
· 应用JDOM处理数据库到XML转变的JSP实现
· Java操作Oracle数据库(建表,插数据,删除)
    微笑服务 优质保证 索取样品