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

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

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

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

  在使用java Swing創建一個xml編輯器之二文章中,我們創建了用于我們XML編輯器的框架結構。為了做到這個目的,我們談到了許多Swing組件(包括 jsplitPane、JScrollPane、 JButton和JTextArea )。 JSplitPane對象又包含了兩個JScrollPane對象,一個用于XML的圖形化瀏覽,另外一個用于文本瀏覽。
  
  在這最后一篇文章中,我們將把最后的界面添加到 XML編輯器中,使它能夠更加用戶友好化。我們將先構建一個菜單系統,然后繼續構造訪問基層文件系統的JFileChooser組件來答應保存XML文件并打開新建文檔。最后,我們將構建一個JDialog框,使用戶能夠取消一個命令并退出應用程序。
  
  那么如何增強我們的Swing應用程序的性能,以使它們利用菜單,訪問文件系統并答應用戶取消操作呢?我們需要創建JMenu組件來處理應用程序的菜單,創建JFileChooser組件來訪問基層文件系統,使用JDialog框來答應用戶取消操作。
  
  在以前的文章中,我們開發了XTree類——一個衍生于 JTree類的可重用組件,能夠把 XML數據以圖形化樹來顯示。因為我們喜歡使用面向對象原則,我們今天所做的修改不會接觸那個類。因為我們喜歡使用面向對象原則,我們今天所做的修改不會接觸那個類。它是一個自包含可重復使用的類,被我們的JFrame容器使用而不是被結合。
  
  第一節 構建菜單組件
  一個JMenu組件包括幾個對象:一個菜單欄、一個或更多菜單和一個或更多菜單項。菜單欄包含菜單,而菜單又包含菜單項。這些Swing組件的名稱都相當直觀的(分別為 JMenuBar、JMenu和 JMenuItem)。
  
  下面是創建一個包含單一菜單項的最小的/" File /"菜單的全部的代碼:
  
  JMenu fileMenu = new JMenu( /"File/" );
  JmenuItem exitItem = new JMenuItem( /"Exit/" );
  
  fileMenu.add( exitItem );
  
  JmenuBar menuBar = new JMenuBar();
   
  menuBar.add( fileMenu );
  
  setJMenuBar( menuBar );
  
  這個過程我們應該非常熟悉,JMenu組件使在任何其他 Java GUI組件構建時創建的。最內部的元素被加到它們的直接父元素中,直到所有的元素都已定義了一個適當的容器。
  
  返回XmlEditor個案研究中,我們實際上已經創建了一個完整的文件菜單,有創建新的 XML文件、打開一個現有的文件、保存文件和退出的功能。我們將在下一小節中具體談談它。
  
  第二節 處理菜單事件
  我們想要創建一個典型的文件菜單,能讓我們的用戶創建一個新文檔,打開一個現有的文件,保存當前的文件并退出應用程序。既然我們知道如何構建這個菜單,那么我們如何響應用戶的菜單選擇呢?和其他Swing組件一樣,答案就在于事件模型和可用的監聽者組件。
  
  處理一個菜單選擇最基本的方法就是把一個作用監聽者添加到菜單項中: exitItem.addActionListener(new exitMenuHandler());當處理復雜的事件處理時(因為菜單系統有可能變得很復雜),應當把事件處理程序定義成單獨的類。上面給出的那個例子添加一個exitMenuHandler類型的行動監聽者。這個類型稍后將在這個應用程序中定義。下面是一個定義exitMenuHandler類所需要最少的代碼:
  
  class exitMenuHandler implements ActionListener {
  public void actionPerformed( ActionEvent ae ) {
  System.exit(0);
  }
  }
  
  雖然這個實現用來證實一個單獨類的定義可能似乎太過簡單了,但是當我們定義用于打開并保存文件的事件處理代碼時,你將熟悉到把單獨的功能性放入單獨的類文件的重要性。此外,這個方法將答應你在不同的應用程序之間重復使用公共菜單功能。
  
  第三節 構建文件系統存取組件
  這個Java應用程序經常需要答應用戶通過一個圖形化文件系統瀏覽程序訪問文件系統。典型情況下,這是因為用戶想要打開或保存一個組件或文件。在我們的XmlEditor應用程序中,我們想要用戶能夠做到這些。
  
  為了訪問基本文件系統,javax.swing包中有一個非常好的組件:JFileChooser組件。無疑,在利用 JFileChooser組件之前你已經使用一個 Swing應用程序。
  
  為了創建一個JFileChooser,你要先實例化一個 JFileChooser對象,設置它的大小然后聲明它要么用于打開文件要么用于保存文件。你要把這個對象和它的父對象-用來激活它的對象 (在我們的例子中是一個菜單項)聯系起來,然后把它要么設置為打開對話框或者保存對話。為了做到這點,你要使用showSaveDialog()或 showOpenDialog()方法,兩個都返回一個int類型的返回值。下面是一個簡短的例子:
  
  JFileChooser jfc = new JFileChooser();
  jfc.setSize( 500, 250 );
  Container parent = openItem.getParent();
  int choice = jfc.showOpenDialog(parent);
  
  最后一行返回的整數值指出用戶最后到底是打開/保存一個文件還是按下取消按鈕。為了響應打開/保存事件,可以把這個整數值定義在 JFileChooser類中的 APPROVE_OPTION常數比較。此時,你只須使用適當的方法打開/保存用戶請求的文件。
  
  請參看代碼段1,是這個應用程序的完整的實現;它包含了所有的六個方法用于構造 XmlEditor應用程序的菜單處理功能。
  
  第四節 構建對話框組件來驗證選擇
  現在,當你點擊 Jframe的關閉窗口時,這個應用程序立即關閉。這不太好。假如用戶在操作一個文件時意外地關閉窗口,那么怎么辦?我們想提示用戶,詢問他們是否真要關閉應用程序。
  
  我們可以使用一個JDialog對話框來實現這個目的。每個圖形應用程序可以在用戶覆蓋另外一個文件、沒有保存就關閉某個文件或在關閉應用程序之前使用它們來提醒用戶。為了簡化編程,我們就把關心的重點放在關閉編輯器的時候,提醒用戶。
  
  我們需要做的就是創建一個JDialog對話框,這個對話框配有Jlabel,它包含了提示語和兩個按鈕,一個用來接收關閉程序的命令,另外一個取消關閉程序的命令。下面是構造這個組件的代碼:
  
  JDialog verifyDialog = new JDialog( this, /"Confirm Exit/", true );
  Jlabel question = new JLabel( /"Are you sure you want to exit?/" );
  Jbutton okButton = new JButton( /"OK/" );
  okButton.addActionListener( this );
  Jbutton cancelButton = new JButton( /"Cancel/" );
  cancelButton.addActionListener( this );
  verifyDialog.getContentPane().setLayout( new FlowLayout() );
  verifyDialog.getContentPane().add( question );
  verifyDialog.getContentPane().add( okButton );
  verifyDialog.getContentPane().add( cancelButton );
  verifyDialog.hide();
  
  現在,還剩兩件事沒做。我們必須為這兩個按鈕編寫事件處理代碼并把窗口關閉事件行為用之取代。就處理這兩個按鈕而言,我們只要在按下 OK時關閉這個應用程序而當按下 Cancel時隱藏對話框。
  
  最后一步就是覆蓋默認的窗口關閉事件動作。默認情況,即使你創建了一個對話框然后用戶單擊取消按鈕, JFrame仍然接收到關閉窗口事件。這將造成 JFrame隱藏本身,除非我們使用下列設置覆蓋它:
  
  setDefaultCloSEOperation( JFrame.DO_NOTHING_ON_CLOSE );
  
  新的設置將使響應窗口關閉事件時絕對不會關閉它本身。它只有響應System.exit()調用時才會關閉它本身。
  
  一旦你添加了菜單組件,定義用于菜單事件的事件處理程序并添加取消意外關閉窗口事件的方法,我們就可以測試這個應用程序并開始創建、編輯并保存 XML文件了。
  
  恭喜!恭喜!你已經有了手工編寫的基于Swing的XML編輯器。剩下的工作就由你來完成了,你需要驗證它,增加它的健壯性,還可以增加一些新的功能。
  附:代碼段1
  
  class newMenuHandler implements ActionListener
  {
   public void actionPerformed ( ActionEvent ae )
   {
    textArea.setText( /"/" );
    try
    { // 創建一個新的XTree
     xTree = new XTree();
     xTree.getSelectionModel().setSelectionMode(  
        TreeSelectionModel.SINGLE_TREE_SELECTION );
     xTree.setShowsRootHandles( true );
     // 這個工具更高級的版本,答應修改JTree
     xTree.setEditable( false );
    }
    catch( Exception ex )
    {
     String message = ex.getMessage();
     ex.printStackTrace();
    }
    file&://結束try/catch
   }
   file&://結束actionPerformed()
  }
  file&://結束class newMenuHandler
  class openMenuHandler implements ActionListener
  {
   JFileChooser jfc;
   Container parent;
   int choice;
   openMenuHandler()
   {
    super();
    jfc = new JFileChooser();
    jfc.setSize( 400,300 );
    jfc.setFileFilter( new XmlFileFilter() );
    parent = openItem.getParent(); }
    file&://結束openMenuHandler()
    class openMenuHandler implements ActionListener
    {
     JFileChooser jfc;
     Container parent;
     int choice;
  
     openMenuHandler()
     {
      s

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲国产| 欧美激情奇米色| 热久久免费国产视频| 欧美特黄级在线| 91久久精品美女高潮| 国产在线精品一区免费香蕉| 日韩大陆欧美高清视频区| 亚洲黄页网在线观看| 狠狠躁夜夜躁人人躁婷婷91| 国产精品视频免费观看www| 日本韩国在线不卡| 91成人在线播放| 国产精品高清免费在线观看| 亚洲欧美中文在线视频| 精品美女永久免费视频| 91国内产香蕉| 午夜免费在线观看精品视频| 国产精品 欧美在线| 精品无人区太爽高潮在线播放| 亚洲第一视频网站| 国产在线播放不卡| 国产又爽又黄的激情精品视频| 国产精品久久久久久超碰| 亚洲自拍偷拍网址| 欧美做爰性生交视频| 91国内揄拍国内精品对白| 国产区亚洲区欧美区| 国产91色在线|| 久久的精品视频| 亚洲人成伊人成综合网久久久| 欧美高清激情视频| 国产精自产拍久久久久久| 国产成人亚洲综合91精品| 国产主播欧美精品| 亚洲免费视频网站| 亚洲欧美激情四射在线日| 欧美日韩高清区| 57pao成人永久免费视频| 国产亚洲欧洲高清| 欧美成人午夜激情视频| 国产精品久久久久久av| 亚洲一级一级97网| 亚洲xxxx妇黄裸体| 精品亚洲国产成av人片传媒| 精品性高朝久久久久久久| 成人av色在线观看| 亚洲视频在线观看网站| 九九久久久久久久久激情| 97成人超碰免| 亚洲图片欧美午夜| 国产精品美女999| 成人有码在线播放| 韩国精品久久久999| 在线亚洲国产精品网| 456国产精品| 国产欧美一区二区白浆黑人| 欧美国产高跟鞋裸体秀xxxhd| 亚洲毛片一区二区| 中文字幕日韩欧美在线视频| 欧美在线观看一区二区三区| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲码在线观看| 亚洲国产成人爱av在线播放| 精品中文字幕久久久久久| 91精品一区二区| 精品日韩美女的视频高清| 亚洲国内高清视频| 最新国产精品亚洲| 法国裸体一区二区| 国产精品自在线| 亚洲欧洲在线视频| 91在线精品视频| 福利视频第一区| 亚洲视频专区在线| 亚洲精品国产精品国自产观看浪潮| 久热精品视频在线观看一区| 国产亚洲视频中文字幕视频| 国产欧美久久久久久| 日韩专区中文字幕| 91视频国产一区| 久久久久久久电影一区| 91精品国产91久久久久久| 日韩在线国产精品| 日韩电影中文字幕av| 欧美高清视频在线| 国产成人精品一区二区在线| 亚洲人a成www在线影院| 成人在线免费观看视视频| 最近更新的2019中文字幕| 欧美丰满少妇xxxx| 久久高清视频免费| 久久精品国产96久久久香蕉| 久久中文字幕视频| 欧美超级乱淫片喷水| 国产精品mp4| 97成人精品区在线播放| 国产免费一区二区三区在线观看| 国产美女高潮久久白浆| 911国产网站尤物在线观看| 人人澡人人澡人人看欧美| 亚洲人成电影网| 欧美性猛交xxxx免费看| 国产成人久久久精品一区| 成人午夜高潮视频| 亚洲国产精品yw在线观看| 成人综合网网址| 久久精品在线视频| 国产在线日韩在线| 精品久久久久久亚洲国产300| 538国产精品视频一区二区| 国产原创欧美精品| 日韩激情视频在线播放| 激情久久av一区av二区av三区| 韩国日本不卡在线| 欧美性猛交xxxx黑人| 亚洲天堂av在线播放| 97**国产露脸精品国产| 中文字幕综合一区| 国产一区二区av| 97人人爽人人喊人人模波多| 日韩精品视频免费在线观看| 不卡中文字幕av| 久久高清视频免费| 亚洲精品不卡在线| 在线观看精品自拍私拍| 久久久久国色av免费观看性色| 久久人人爽人人爽人人片av高请| 5566成人精品视频免费| 岛国av一区二区在线在线观看| 欧美美最猛性xxxxxx| 色悠久久久久综合先锋影音下载| 欧美成人午夜视频| 欧美电影在线观看高清| 久久精品小视频| 欧美激情在线播放| 国产免费一区二区三区香蕉精| 欧美在线精品免播放器视频| 色阁综合伊人av| 国产精品丝袜久久久久久不卡| 欧美日韩在线视频观看| 国产精品国产三级国产aⅴ9色| 中文国产亚洲喷潮| 午夜精品久久久久久久久久久久| 国产精品夜色7777狼人| 亚洲精品美女久久久久| 国产日产欧美a一级在线| 精品久久久久久亚洲精品| 国产精品久久久久久久久久新婚| 国产午夜精品视频| 欧美高跟鞋交xxxxhd| 久久国产精品久久久久| 国产精品自产拍高潮在线观看| 久久精品99久久久久久久久| 亚洲最新中文字幕| 亚洲成人xxx| 亚洲成人黄色在线观看| 国产日韩在线观看av| 欧美视频不卡中文| 亚洲欧洲一区二区三区久久| 97色在线播放视频| 久久福利网址导航| 欧美裸体视频网站| 久久久久久久久久婷婷| 日韩在线www|