毕节信息港
军事
当前位置:首页 > 军事

使用JavaSwing创建一个XML编辑

发布时间:2019-06-20 05:23:06 编辑:笔名

  在本文中,我们将创建我们的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.\" );

  d( instructions );

  d( openingDoc );

  d( editingDoc );

  d( openingDocText );

  d( 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(

  NGLE_TREE_SELECTION );

  setShowsRootHandles( true );

  setEditable( false );

  dbf = document.wInstance();

  tValidating( false );

  db = wdocument.uilder();

  setModel( buildWelcomeTree() );

  }

  三、创建 XmlEditor类

  XmlEditor类与前面的那篇文章的XTreeTester类有相同的用途,不同之处在于 XmlEditor包括一个 JTextArea,允许你操作文本版XML。之后,你可以点击 “Refresh”按钮并查看 XTree组件中反映出来的变化。

  如果直接修改篇文章中的代码,你就能节省很多时间,你可以把 va文件重命名为 va (不过一定要修改构造程序 )并把它当成模板文件。

  要做的件事是添加下列 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\" );

  tBorder(

  eateRaisedBevelBorder() );

  dActionListener( this );

  getContentPane().add( refreshButton, RTH );

  代码段5:

  public void actionPerformed( ActionEvent ae )

  {

  if ( tActionCommand().equals( \"Refresh\" ) )

  fresh( tText() );

  }

  接下来,我们将创建新的 JScrollPane和 JTextArea并且把 JTextArea添加到 JScrollPane中。这样,我们将得到包含 XTree组件的原始的 JScrollPane和包含 JTextArea组件的新的 JScrollPane。这个原始的 XTree构造程序还有一个修改之处。我们将删除先前传进这个方法的字符串参数。(该功能通过我们接下来要构建的另一个 XmlEditor()构造程序操作)我们把这两个方框放进一个 JSplitPane中,它是一个有分隔器的组件,可以在这个分隔器的另一边包含一个组件。(参见代码段6)。

  代码段6:

  jScroll = new JScrollPane();

  jScrollRt = new JScrollPane();

  textArea = new JTextArea( 200,150 );

  tViewport().add( textArea );

  xTree = new XTree();

  tSelectionModel().setSelectionMode(

  NGLE_TREE_SELECTION );

  tShowsRootHandles( true );

  tEditable( false );

  tViewport().add( xTree );

  splitPane = new JSplitPane( RIZONTAL_SPLIT,

  jScroll, jScrollRt );

  tOneTouchExpandable(true);

  tDividerLocation(200);

  minimumSize = new Dimension(200, 150);

  tMinimumSize( minimumSize );

  tMinimumSize( minimumSize );

  tPreferredSize( new Dimension(400, 300) );

  getContentPane().add( splitPane, NTE 查看本文来源

宝宝消化不良饮食注意
小儿厌食拉肚子喝四磨汤
儿童消化不良吃什么药
友情链接
宝宝风寒感冒怎么办 小孩高烧怎么办 小儿退烧药 幼儿感冒咳嗽流鼻涕怎么办 一岁宝宝流鼻血 6岁儿童晚上睡觉出汗 婴儿发烧物理降温 小孩经常感冒怎么办 一岁半宝宝发烧39度怎么办 宝宝高烧39度的最佳处理方法 4个月婴儿咳嗽怎么办 宝宝一直咳嗽怎么办 孩子睡觉咳嗽厉害怎么办 小孩半夜咳嗽是什么原因 小孩风寒感冒吃什么药 小孩咳嗽吃什么药 小孩发烧原因 小儿咳嗽的治疗方法 宝宝着凉咳嗽怎么办 小儿风寒感冒吃什么药 七个月宝宝发烧39度怎么办 宝宝持续低烧 小儿病毒性感冒症状有哪些 小儿便秘怎么治 孩子挑食怎么办 宝宝晚上咳嗽厉害怎么办 三四个月宝宝咳嗽怎么办 孩子咳嗽发烧 婴儿干咳 退烧推拿手法图解 孩子喉咙痒咳嗽怎么办 儿童感冒 小孩反复发烧怎么办 小儿化痰药 7个月宝宝感冒咳嗽流鼻涕怎么办 宝宝高烧39度的最佳处理方法 小儿夜咳怎么办 宝宝晚上发烧 五个月宝宝发烧怎么办 小宝宝发烧怎么办 孩子老是咳嗽 孩子干咳比较厉害什么药效果好 小孩发烧推拿 孩子老是咳嗽 5个月宝宝发烧怎么办 小孩经常便秘怎么办 三个月宝宝咳嗽怎么办 孩子干咳嗽是什么原因 小儿发烧怎么办 小孩感冒咳嗽流鼻涕怎么办 宝宝经常便秘怎么办 婴儿干咳怎么回事 宝宝发烧喂不进去药怎么办 儿童发烧怎样退烧快 小孩发烧怎么退烧最快 小孩便秘 五个月宝宝感冒咳嗽怎么办 小儿退烧方法 小孩有点咳嗽怎么办 三岁儿童老是干咳嗽怎么办 宝宝半夜发烧39度怎么办 宝宝发烧不退怎么办 小孩持续低烧的危害 幼儿咳嗽吃什么药效果好 三岁宝宝晚上咳嗽厉害怎么办 小孩干咳 宝宝有点咳嗽怎么办 小孩老咳嗽怎么办 宝宝发烧手脚冰凉怎么回事 小孩夜里咳嗽厉害妙招 小孩退烧推拿手法图 宝宝咳嗽吃什么药 小孩反复高烧是怎么回事 小孩不爱吃饭怎么办 孩子不吃饭是什么原因 孩子发烧39度怎么办 孩子高烧不退怎么办 四岁宝宝咳嗽怎么办 孩子晚上睡觉咳嗽厉害怎么办