网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > Java&XML > XMLBeans > 使用Java Swing 创建一个XML编辑器  

使用Java Swing 创建一个XML编辑器

2003-08-13  作者:BitsCN整理  来源:中国网管联盟  点评 投稿 收藏


  我想您一定对XML有所了解,说不定您现在还跃跃欲试想写一段XML文本呢,可是现在能找到的跨平台的、免费的XML编辑器太少了。所以在本文中,我想介绍一下或者说带您一步一步的开发一个简单的XML编辑器,当然我们要用到一些最常见的Java 2 Swing组件,不过这些都是免费的,有些是JDK中的,有些是可以从网上下载的。我想通过本文,你就可以创建一个属于你自己的XML编辑器。
  
  
  
    先让我介绍一下本文辑写的思路。首先我想简要的讨论一下XML和为什么树型结构比较适合用来显示XML,然后我们来看一看JAXP API如何建立所需要的XML类的环境;然后我们将了解用来显示一个图形树的JTree Swing组件;最后,我们将创建一个继承JTree组件的可以重复使用的类,可以用来分析一个XML文档,并把数据显示在一个Jtree中。
  
  
  
    说到XML(eXtensible Markup Languge),人们往往把它当成是一种新的用于Web浏览器中的标记语言,就象HTML或CSS一样。其实,XML是一种数据表示语言,它允许你使用一种非常有效的方法来描述你的数据。XML能够使你定义诸如“these three words constitutes a heading”这样的语句。XML允许你声明任何类型的数据,而不是用来把这些数据显示在网页中。

网管论坛bbs_bitsCN_com


  
  
  
    请看一看下面的XML实例:
  
  
  
  <article>
  
  <header>
  
  <title> 使用Java Swing 创建一个XML编辑器
  
  <subtitle> 第一部分</subtitle>
  
  </title>
  
  <author> Wayne </author>
  
  <header>
  
  <content> 这是正文</content>
  
  </article>
  
  
  
  
  
    请注意,这些元素和标准的HTML语句是不同的,但是它们看上去比较象HTML,这是因为XML和HTML都是来源于SGML语言。不同的是HTML有预定义的标签集,而XML的语法则有许多灵活性,它允许你使用表意的标记如<author>来括在数据两边。你还要注意,所有的元素都从属于根元素(上例中为<article>),有些元素则还有自己的子元素,如<subtitle>就是<title>的子元素。这样的数据组织方式有三个好处:数据能够更加表意,数据更加易维护而且数据更加容易作为一个树的结构表现出来,这就是我们为什么使用JTree对象来显示XML数据的原因。如果你想对XML有更深的了解,请参阅天极网上的相关教程。
  
  
   网管下载dl.bitscn.com
    JAXP是一个用于处理XML的Java API,它能够使应用程序分析并且转化XML文档,它的功能有点象JDBC API,都是把函数功能抽象成一个个方法。你可以去Apache网站找到最新的Xerces分析器,其中含有最新的JAXP,下载下来以后把它放在你的类目录中。
  
  
  
  下面让我们看一下如何使用JTree Swing组件。
  
  
  
    我们都知道,在自然界中,一棵树通常都有一个非常粗的树干,树干上有许多树枝分叉。每个树杈和树杈之间都有一定的联系,因为它们都有同一个来源:树干。这种继承的关系并不只在树枝中有,人类谱系也遵循相同的规律。从父母,到子女再到子女的子女,就这样直到数不清为止。同样,在数据存储中,树的概念也是一种使用同人类家谱树一样方法储存数据的方法。树的每一个树杈称为一个节点,每个有子节点的节点称为父节点,所有的子节点的公共的父节点被称为根节点。一个JTree组件就是一个简单的树数据结构的可视化表现形式。
  
  
  
    几乎所有的XML编辑器都包括一个可视化的树结构,能让你编辑XML文档中的元素。我们马上就会构建一个编辑器,不过在此之前,先让我们再了解一下JTree组件。一个节点在一棵树的某个位置储存数据,为了存储数据,必须知道任何一个父节点和它们的子节点。javax.swing.tree包定义了一些非常有用的接口,提供了一种通用的方法构建和操作一个树结构。

中国网管联盟bitsCN.com


  
  
  
    TreeNode方法,用于访问树的节点的信息
  
  
  
    MutableTreeNode方法 用在一个可变的树上(能够添加或删除子节点)
  
  
  
    TreeModel方法 用于创建和管理与树有关的数据模型。
  
  
  
    接下来,我们将创建一个继承JTree的类,提供分析XML文档和用可视化JTree组件把节点显示出来的功能。
  
  
  
    创建XTree组件
  
  
  
    XTree类由一个构造函数和三个方法组成,为了简单起见我们的组件只能构建一个Xtree,在树创建好之后不能进行处理它的节点。下面让我们来看一个这个类。
  
  
  
    域:
  
  
  
    private DefaultMutableTreeNode treeNode 这个成员变量储存TreeNode对象用于存储JTree的模型。 
  
  
  
    DefaultMutableTreeNode类是在javax.swing.tree中被定义的,默认提供了MutableTreeNode接口的一个实现。
  
  
  
    private DocumentBuilderFactory dbf
  
  
  
    private DocumentBuilder db 网管u家www.bitscn.net
  
  
  
    private Document doc 这三个成员变量是JAXP的一部分,用来分析XML文本并转化成DOM(Document Object Model) 对象。
  
  
  
    构造函数
  
  
  
    public XTree( String text )
  
  
  
    这个构造函数通过使用传送到构造器中的XML文本创建一个XTree对象。在初始化一些与JTree超类和DOM分析对象有关的基本显示属性后,构造函数生成一个TreeModel 对象用来创建一个实际可视的树。通过把DOM对象传送到createTreeNode()方法来创建一个根节点,createTreeNode()方法返回一个DefaultMutableTreeNode类型的对象。这个对象然后被用来创建树的TreeModel。
  
  
  
    方法
  
  
  
     private DefaultMutableTreeNode createTreeNode( Node root )
  
  
  
    这个方法采用一个DOM 节点,然后在子节点中递归直到所有的接点都被添加到DefaultMutableTreeNode中。这是一个递归方法,为了找到根节点下的每一个子节点,它每次都要调用自己。JTree然后就可以使用DefaultMutableTreeNode对象了,因为它已经是树型了。
网管有家www.bitscn.net

  
  
  
     private String getNodeType( Node node )
  
  
  
    这个方法,被createTreeNode()用来联系一个字符串和某一种类型的节点。
  
  
  
     private Node parseXml()
  
  
  
    这个方法,用来分析XML文本字符串,它返回Node类型的对象,能够被传送到createTreeNode()方法中。
  
  下面我给出了java代码,供大家分析研究。
  
  
  
  // 到入W3C的DOM 类
  
  import org.w3c.dom.*;
  
  // JAXP的用于DOM I/O的类
  
  import javax.xml.parsers.*;
  
  // 标准Java类
  
  import javax.swing.*;
  
  import javax.swing.tree.*;
  
  import javax.swing.event.*;
  
  import java.awt.*;
  
  import java.awt.event.*;
  
  import java.io.*;
  
  public class XTree extends JTree
  
  {
  
  /**
  
  * 这个成员变量储存TreeNode对象用于存储JTree的模型。
  
  *DefaultMutableTreeNode类是在javax.swing.tree中被定义的 网管联盟bitsCN@com
  
  *默认提供了MutableTreeNode接口的一个实现。
  
  */
  
  private DefaultMutableTreeNode treeNode;
  
  /**
  
  * 这三个成员变量是JAXP的一部分,用来分析XML文本并转化成DOM(Document Object Model) 对象。
  
  */
  
  private DocumentBuilderFactory dbf;
  
  private DocumentBuilder db;
  
  private Document doc;
  
  
  
   /**
  
   * 这个构造函数通过使用传送到构造器中的XML文本创建一个XTree对象
  
  
  
   * @参数 text是一个XML格式的XML文本
  
  
  
   * @异常 ParserConfigurationException 如果构造函数非正常的设置分析器,就会抛出异常
  
  
  
   */
  
  
  
  public XTree( String text ) throws ParserConfigurationException
  
  {
  
  super();
  
  
  
  // 设置Tree渲染的基本属性
  
  getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION );

网管联盟bitsCN_com


  
  setShowsRootHandles( true );
  
  setEditable( false ); // 允许树可以编辑
  
  
  
  // 通过初始化对象的DOM来分析对象
  
  dbf = DocumentBuilderFactory.newInstance();
  
  dbf.setValidating( false );
  
  db = dbf.newDocumentBuilder();
  
  
  
  // 采用DOM根节点并且把它转化成JTree的树模型
  
  treeNode = createTreeNode( parseXml( text ) );
  
  setModel( new DefaultTreeModel( treeNode ) );
  
  } file://中止XTree()
  
  
  
  
TAGs   创建   XML   节点   方法   对象   数据   JTree      
 上一篇:从JDBC数据库提取对XML/DOM友好的数据   下一篇:用Java生成XML
相关文章列表
使用Java Swing 创建一个XML编辑器 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
1.通过JOX轻松实现JavaBeans与XML的相互转
2.用Eclipse进行XML开发
3.JavaBeans:开发Session Bean
4.Scala 和XML以及简化XML处理
5.使用异步Bean提高Web服务性能
6.java解析xml文件
7.JavaBeans:Bean容器的规约
8.JAVA高手解析XML配置文件的读取操作
9.JavaBeans:创建一个新的Cabin实体
10.JavaBeans :创建客户端应用
最新推荐文章:
1.Digester解析XML文档Sample
2.Java解析XML文档――dom解析xml
3.Ajax: 构建动态的 Java 应用程序(图)
4.技术分享 使用XML-RPC来访问Web服务
5.使用SAX和XSLT实现复杂数据转换(组图)
6.模式验证结构-JAXP 1.3 的特性
7.Java API for XML Parsing(JAXP)演进
8.使用web.xml控制Web应用的行为一
9.具有邮编区号查询功能的js+xml版
10.Ajax铺设了更好的开发Web应用道路(图)
网管论坛交流:
·大家来开心一下吧---看了会很开心的东西-
·中国人不可不知道的知识
·@@小鹏◎◎小鹏同志与某位女明星亲密接触
·◎◎小鹏◎◎发现不明生物,居然正在交配
·[图文]^^^版主是什么?????
·泡论坛的女人是好女人
·做个“水性杨花”的女人
·献给mm俱乐部的所有mm
·深圳一集团企业电脑基础应用培训教程
·■■■■十一遊玩照■■■■■