网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  使用java swing创建一个xml编辑器之二     
  文章作者:未知  文章来源:水木森林  
  查看:90次  录入:管理员--2007-11-17  
 
  在本文中,我们将创建我们的xml编辑器的框架,为了达到这个目的,我们将用到许多swing组件(包括jsplitpane、jscrollpane、jbutton和jtextarea组件)。
  
  一、问题的提出与解决
  我如何创建一个能够浏览文本和浏览视图的xml文本编辑器呢?创建一个包含jbutton和jsplitpane的jframe对象, 然后让jsplitpane对象包含两个jscrollpane对象,一个用于浏览图形(xtree类),另一个用于浏览文本(jtextarea类)。jbutton用来管理刷新图形浏览的操作。
  
  二、增强xtree类的功能
  在上一篇文章中,我们开发了xtree类,这是一个可重用的组件,继承于jtree类并能够把xml数据以图形树的形式显示。我们现在就增强这个类, 通过提供给它一个在显示默认的xml树来we will now enhance that class by providing it with a default xml
  tree to display in the event that an xml file is not supplied at the command-line. 而且,我们还将添加一些错误处理逻辑以便程序不会因为无效的xml而崩溃。
  
  第一步是创建一个名为buildtree()的方法:
  
  private defaulttreemodel buildtree( string text )
  
  {
  
   defaultmutabletreenode treenode;
  
   node newnode;
  
   // 采用dom根节点并把它转化成为一个tree模型
  
   newnode = parsexml( text );
  
   if ( newnode != null )
  
   {
  
    treenode = createtreenode( newnode );
  
    return new defaulttreemodel( treenode );
  
   }
  
   else
  
    return null;
  
   } file&://结束buildtree()
  
  
  这个方法取得传入的 xml字符串,分析这个 xml字符串并构造一个可以用来从数据中构造图形树形结构的defaulttreemodel变量实例。这个功能原来包含在 xtree()构造程序中,但是我们把它拿出来然后把它放进一个单独的方法中,这样我们就有了创建一个默认图形树的伸缩性。这就是我们接下来想做的事。
  
  接下来一步是创建一个叫 buildwelcometree()的方法。这个方法一次构建一个defaulttreemodel变量,而不是通过分析一个现有的xml文字字符串。如果用户没有指定 xml文件就启动这个应用程序,将显示 defaulttreemodel。见代码段1
  
  代码段1:
  
  private defaulttreemodel buildwelcometree()
  {
   defaultmutabletreenode root;
   defaultmutabletreenode instructions, openingdoc,
               editingdoc, savingdoc;
   defaultmutabletreenode openingdoctext, editingdoctext,
               savingdoctext;
   defaultmutabletreenode development, addingfeatures,
               contactingkyle;
  
   root = new defaultmutabletreenode( /"welcome to xml view 1.0/" );
   instructions = new defaultmutabletreenode( /"instructions/" );
   openingdoc = new defaultmutabletreenode
               ( /"opening xml document./" );
   openingdoctext = new defaultmutabletreenode
               ( /"when invoking the xmleditor from
   the command-line, you must specify the filename./" );
   editingdoc = new defaultmutabletreenode
               ( /"editing an xml document." );
   editingdoctext = new defaultmutabletreenode
               ( /"xml text in the right hand frame
               can be edited directly.
               the //"refresh//" button will rebuild
               the jtree in the left frame./" );
   savingdoc = new defaultmutabletreenode
               ( /"saving an xml document." );
   savingdoctext = new defaultmutabletreenode
              ( /"this iteration of the xmleditor does
                not provide the ability to save your
                document. that will come with the
                next article./" );
   root.add( instructions );
   instructions.add( openingdoc );
   instructions.add( editingdoc );
   openingdoc.add( openingdoctext );
   editingdoc.add( editingdoctext );
   return new defaulttreemodel( root );
  }
  
  接下来的我们需要添加一个新的构造程序来简化默认显示功能,我们将修改主构造程序,这样它就不能接受任何参数,创建一个新的能接收单一的 xml文本字符串的构造程序。这样以来,如果没有 xml文本被显示的话就会创建默认 xtree对象,而如果 xml文本被显示的话将创建一个唯一的 xtree对象。代码段2中给出了两个构造程序。
  
  代码段2:
  
  public xtree( string text ) throws parserconfigurationexception
  {
   this();
   refresh( text );
   }
  public xtree() throws parserconfigurationexception
  {
   super();
   getselectionmodel().setselectionmode(
       treeselectionmodel.single_tree_selection );
   setshowsroothandles( true );
   seteditable( false );
   dbf = document.uilderfactory.newinstance();
   dbf.setvalidating( false );
   db = dbf.newdocument.uilder();
   setmodel( buildwelcometree() );
  }
  
  三、创建 xmleditor类
  xmleditor类与前面的那篇文章的xtreetester类有相同的用途,不同之处在于 xmleditor包括一个 jtextarea,允许你操作文本版xml。之后,你可以点击 “refresh”按钮并查看 xtree组件中反映出来的变化。
  
  如果直接修改第一篇文章中的代码,你就能节省很多时间,你可以把 xtreetester.java文件重命名为 xmleditor.java (不过一定要修改构造程序 )并把它当成模板文件。
  
  要做的第一件事是添加下列 swing组件:另一个 jscrollpane、 jsplitpane、 jtextarea和 jbutton。通过声明所有的这些组件以及其他组件开始(看代码段3)。
  
  代码段3:
  
  private xtree xtree;
  private jscrollpane jscroll, jscrollrt;
  private jsplitpane splitpane;
  private jbutton refreshbutton;
  private windowlistener winclosing;
  
  首先,我们将创建并添加“ refresh”按钮。这个按钮用来指示这个 xtree组件将使用当前 xml文本来刷新。我们还需要使用一个actionlistener来注册它。(参见代码段 4 ) 为了拦截按钮事件,我们需要有这个类还要实现 actionlistener,而且我们还需要创建一个 actionperformed()方法 (参见代码段 5 )。
  
  代码段4:
  
  refreshbutton = new jbutton( /"refresh/" );
  refreshbutton.setborder(
    borderfactory.createraisedbevelborder() );
  refreshbutton.addactionlistener( this );
  getcontentpane().add( refreshbutton, borderlayout.north );
  
  代码段5:
  
  public void actionperformed( actionevent ae )
  {
   if ( ae.getactioncommand().equals( /"refresh/" ) )
    xtree.refresh( textarea.gettext() );
  }
  
  接下来,我们将创建新的 jscrollpane和 jtextarea并且把 jtextarea添加到 jscrollpane中。这样,我们将得到包含 xtree组件的原始的 jscrollpane和包含 jtextarea组件的新的 jscrollpane。这个原始的 xtree构造程序还有一个修改之处。我们将删除先前传进这个方法的字符串参数。(该功能通过我们接下来要构建的另一个 xmleditor()构造程序操作)我们把这两个方框放进一个 jsplitpane中,它是一个有分隔器的组件,可以在这个分隔器的另一边包含一个组件。(参见代码段6)。
  
  代码段6:
  
  jscroll = new jscrollpane();
  jscrollrt = new jscrollpane();
  
  textarea = new jtextarea( 200,150 );
  jscrollrt.getviewport().add( textarea );
  
  xtree = new xtree();
  xtree.getselectionmodel().setselectionmode(
     treeselectionmodel.single_tree_selection );
  xtree.setshowsroothandles( true );
  
  xtree.seteditable( false );
  
  jscroll.getviewport().add( xtree );
  
  splitpane = new jsplitpane( jsplitpane.horizontal_split,
     jscroll, jscrollrt );
  splitpane.setonetouchexpandable(true);
  splitpane.setdividerlocation(200);
  
  minimumsize = new dimension(200, 150);
  jscroll.setminimumsize( minimumsize );
  jscrollrt.setminimumsize( minimumsize );
  
  splitpane.setpreferredsize( new dimension(400, 300) );
  
  getcontentpane().add( splitpane, borderlayout.cente
 
 
上一篇: 使用java swing创建一个xml编辑器之三    下一篇: 用xslt 和 xml改进struts
  相关文档
java的破解和反破解 11-17
优化java applet的加载过程 11-17
如何设置classpath 11-17
软件项目开发过程模型 11-17
设计模式与java 11-17
jdk文档汉化正在进行 javachampion今年首评 11-17
介绍jsr184(3d)中的光线概念 11-17
together for eclipse的使用 11-17
新手入门:介绍jsp中request属性的用法 11-16
java开源项目hibernate 11-16
java从入门到精通之方法篇 11-17
玩转java的classpath 11-17
java语言深入:c#与java相似之处的对比 02-29
在rms中存储和读取数据 11-17
netbeans ide4.1 j2ee程序快速入门指南 11-17
j2se综合--怎样取得class文件的路径 01-25
从java应用程序动态生成pdf文件 11-17
j2ee综合--java语言不一定就跨平台 03-03
javabeans教程 11-17
palm j2me串行通讯程序编写与调试 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息