国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用Java Swing創建一個XML編輯器之二

2019-11-18 12:49:19
字體:
來源:轉載
供稿:網友

  在本文中,我們將創建我們的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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阜南县| 桐庐县| 若尔盖县| 呼图壁县| 吐鲁番市| 武宣县| 凤山县| 宁阳县| 平山县| 图片| 鄂州市| 阜康市| 如皋市| 义乌市| 祁连县| 西昌市| 中山市| 禹州市| 澳门| 兴文县| 渝中区| 岚皋县| 兴安县| 安多县| 南召县| 鄂州市| 海南省| 蓬莱市| 民丰县| 阳泉市| 从江县| 馆陶县| 娄底市| 宜州市| 固始县| 曲靖市| 溧水县| 宁陵县| 宜城市| 丽江市| 南昌市|