亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

使用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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩在线视频网站| 91精品国产色综合| 久久久av亚洲男天堂| 亚洲欧洲免费视频| 久久久99免费视频| 亚洲女人天堂成人av在线| 久久精品一区中文字幕| x99av成人免费| 亚洲精品中文字| 亚洲精品视频免费在线观看| 久久中文字幕国产| 国产视频精品久久久| 精品综合久久久久久97| 中文字幕亚洲综合久久筱田步美| 国产亚洲精品久久久久久777| 国产精品十八以下禁看| 国产综合在线看| 国产精品av在线播放| 欧美理论在线观看| 在线精品视频视频中文字幕| 美女少妇精品视频| 久久成人在线视频| 欧美国产日韩xxxxx| 亚洲www在线观看| 亚洲精品久久在线| 久久视频免费观看| 欧亚精品中文字幕| 97成人精品区在线播放| 午夜精品99久久免费| 欧美激情在线播放| 中文字幕久精品免费视频| 日产精品久久久一区二区福利| 在线免费观看羞羞视频一区二区| 欧美激情乱人伦| 亚洲人成啪啪网站| 精品伊人久久97| 国产精品福利在线观看| 少妇精69xxtheporn| 日韩欧美成人精品| 久久久久久久999精品视频| 久久久极品av| 懂色av中文一区二区三区天美| 国产视频精品va久久久久久| 欧美日韩精品在线观看| 欧美小视频在线| 国产精品高清在线观看| 国产亚洲精品久久久| 欧美成人在线免费视频| 久久国产精品久久久| 色先锋资源久久综合5566| 欧美亚洲国产成人精品| 国产精品电影久久久久电影网| 奇米成人av国产一区二区三区| 色七七影院综合| 日本国产欧美一区二区三区| 欧美日韩国产成人在线观看| 日本久久久久久| 亚洲一区二区精品| 欧美福利视频在线观看| 国产成人精品视频在线观看| 国产日韩专区在线| 欧美成人一区在线| 亚洲无线码在线一区观看| 美女久久久久久久久久久| 亚洲综合中文字幕在线| 久久中文精品视频| 92裸体在线视频网站| 国产精品精品久久久| 91精品国产91久久久久久不卡| 亚洲va国产va天堂va久久| 色妞欧美日韩在线| 日产精品久久久一区二区福利| 国产精品十八以下禁看| 国产一区二中文字幕在线看| 国产精品久久久久久久电影| 欧美亚洲在线播放| 久久中文字幕一区| 国产欧美中文字幕| 亚洲肉体裸体xxxx137| 国产v综合ⅴ日韩v欧美大片| 亚洲女性裸体视频| 中文字幕久精品免费视频| 91欧美精品午夜性色福利在线| 国产日韩欧美综合| 成人免费淫片视频软件| 久久久免费精品| 中文字幕亚洲字幕| 亚洲香蕉伊综合在人在线视看| 精品激情国产视频| 亚洲激情视频在线播放| 一区二区欧美亚洲| 97久久精品国产| 日韩欧美aⅴ综合网站发布| 精品亚洲一区二区三区在线观看| 亚洲欧洲激情在线| 亚洲精品二三区| 亚洲激情视频网| 在线看国产精品| 亚洲深夜福利网站| 日韩av在线直播| 亚洲а∨天堂久久精品9966| 另类天堂视频在线观看| 欧美电影免费观看高清完整| 国产精品午夜一区二区欲梦| 日韩视频一区在线| 久久久久久久国产精品视频| 91地址最新发布| 亚洲欧美制服中文字幕| 久久久久久久久91| 亚洲成av人影院在线观看| 日韩av观看网址| 国产一区二区三区在线视频| 日韩在线观看高清| 国产成人免费av| 中文字幕日韩在线视频| 亚洲欧美国产日韩中文字幕| 91亚洲精品久久久久久久久久久久| 国产精品久久久久久久久男| 欧美裸体xxxxx| 欧美极品少妇xxxxⅹ免费视频| 国产精品丝袜久久久久久不卡| 日本亚洲精品在线观看| 日韩中文字幕网站| 日韩av影视综合网| 亚洲综合视频1区| 国产+成+人+亚洲欧洲| 黑人精品xxx一区| 亚洲韩国欧洲国产日产av| 精品国产一区二区三区久久狼黑人| 久久久久中文字幕| 久久久久久噜噜噜久久久精品| 在线电影中文日韩| 亚洲天堂成人在线| 日本午夜精品理论片a级appf发布| 欧美性极品少妇精品网站| 亚洲最新视频在线| 91美女片黄在线观| 国产日韩欧美91| 亚洲电影免费观看| 91亚洲精品在线观看| 一区二区av在线| 久久九九国产精品怡红院| 欧美成人午夜激情视频| 日韩精品极品视频免费观看| 蜜月aⅴ免费一区二区三区| 日韩精品免费观看| 亚洲91av视频| 一区二区av在线| 97在线免费观看视频| 欧美精品videosex极品1| 国产99视频精品免视看7| 国产精品视频1区| 欧美精品激情在线| 国产精品网址在线| 亚洲精品综合久久中文字幕| 欧美日韩国产成人高清视频| 91国产一区在线| 欧美日韩免费一区| 久久精品中文字幕免费mv| 日韩av最新在线观看| 久久久999精品免费| 俺也去精品视频在线观看| 91产国在线观看动作片喷水| 亚洲aⅴ男人的天堂在线观看|