动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.通过socket传递java对象(对象序列.
.Java实时应用程序中的内存管理.
.存取程序状态的几种方法——Java.
.Java IT技术认证为什么火?.
.学习Jakarta Struts 1.1 (一).
.熟练掌握JDK1.5枚举类型.
.多线程程序设计.
.用Java的循环实现矩阵乘法代码分.
.在应用程序中处理jar文件.
.JAVA加密解密---自定义类加载器应.
.Java初学者入门需掌握的30个基本.
.JAVA规则 基本篇.
.Java Servlet API说明文档(2.1a.
.Java加密扩展基础.
.类的初始化问题.
.经典J2EE开发工具-IBM Ecl.
.《Java编程思想》(第二版)第08章.
.Java学习集中营各种问题的分析讲.
.Eclipse3.1中体验J2SE5.0之泛型(.
.Appfuse在jboss上的配置.

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

发表日期:2008-1-5 |



  www.dukeJava.com 网络娇娃工作站
 
  我想您一定对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答应你声明任何类型的数据,而不是用来把这些数据显示在网页中。

  请看一看下面的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有更深的了解,请参阅天极网上的相关教程。

  JAXP是一个用于处理XML的Java API,它能够使应用程序分析并且转化XML文档,它的功能有点象JDBC API,都是把函数功能抽象成一个个方法。你可以去Apache网站找到最新的Xerces分析器,其中含有最新的JAXP,下载下来以后把它放在你的类目录中。

下面让我们看一下如何使用JTree Swing组件。

  我们都知道,在自然界中,一棵树通常都有一个非常粗的树干,树干上有许多树枝分叉。每个树杈和树杈之间都有一定的联系,因为它们都有同一个来源:树干。这种继续的关系并不只在树枝中有,人类谱系也遵循相同的规律。从父母,到子女再到子女的子女,就这样直到数不清为止。同样,在数据存储中,树的概念也是一种使用同人类家谱树一样方法储存数据的方法。树的每一个树杈称为一个节点,每个有子节点的节点称为父节点,所有的子节点的公共的父节点被称为根节点。一个JTree组件就是一个简单的树数据结构的可视化表现形式。

  几乎所有的XML编辑器都包括一个可视化的树结构,能让你编辑XML文档中的元素。我们马上就会构建一个编辑器,不过在此之前,先让我们再了解一下JTree组件。一个节点在一棵树的某个位置储存数据,为了存储数据,必须知道任何一个父节点和它们的子节点。javax.swing.tree包定义了一些非常有用的接口,提供了一种通用的方法构建和操作一个树结构。

  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

  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对象了,因为它已经是树型了。

   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中被定义的
*默认提供了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 );
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()

  /**

  * 这个方法采用一个DOM 节点,然后在子节点中递归直到所有的接点都被添加到DefaultMutableTreeNode中。

  * 这是一个递归方法,为了找到根节点下的每一个子节点,它每次都要调用自己。

  * JTree然后就可以使用DefaultMutableTreeNode对象了,因为它已经是树型了。

  *

  * @参数 root org.w3c.Node.Node

  *

  * @返回值 返回一个基于根节点DefaultMutableTreeNode对象

  */

private DefaultMutableTreeNode createTreeNode( Node root )
{
DefaultMutableTreeNode treeNode = null;
String type, name, value;
NamedNodeMap attribs;
Node attribNode;

// 从根节点中取得数据
type = getNodeType( root );
name = root.getNodeName();
value = root.getNodeValue();

treeNode = new DefaultMutableTreeNode( root.getNodeType() == Node.TEXT_NODE ? value : name );

// 显示属性
attribs = root.getAttributes();
if( attribs != null )
{
for( int i = 0; i < attribs.getLength(); i++ )
{
attribNode = attribs.item(i);
name = attribNode.getNodeName().trim();
value = attribNode.getNodeValue().trim();

if ( value != null )
{
if ( value.length() > 0 )
{
treeNode.add( new DefaultMutableTreeNode( "[Attribute] --> " + name + "="" + value + """ ) );
} file://end if ( value.length() > 0 )
} file://end if ( value != null )
} file://end for( int i = 0; i < attribs.getLength(); i++ )
} file://end if( attribs != null )

// 假如存在子节点,递归
if( root.hasChildNodes() )
{
NodeList children;
int numChildren;
Node node;
String data;

children = root.getChildNodes();
// 假如子节点非空的话,只递归
if( children != null )
{
numChildren = children.getLength();

for (int i=0; i < numChildren; i++)
{
node = children.item(i);
if( node != null )
{
if( node.getNodeType() == Node.ELEMENT_NODE )
{
treeNode.add( createTreeNode(node) );
} file://end if( node.getNodeType() == Node.ELEMENT_NODE )

data = node.getNodeValue();

if( data != null )
{
data = data.trim();
if ( !data.equals(" ") && !data.equals("
上一篇:使用Jakarta Commons Pool处理对象池化 人气:568
下一篇:使用Java Swing 创建一个XML编辑器(三) 人气:726
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-2 OpenPNE中文 v2.12.5 for win 中
2008-12-2 谷秋精品课程软件课程版 v2.3
2008-12-2 晴天电影系统(带一键迅雷/自定义
2008-12-2 QQip138闪字程序
2008-12-2 SmartWeb企业智能建站系统 v1.0.2
2008-12-2 梦想不死个人主页 v2009
2008-12-2 开良ASP小偷程序生成器 v1.1
2008-12-2 toolxp.cnalexa世界排名查询 php
2008-12-2 腾讯留言板 v1.3
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成