日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:84日期:2024-06-22 14:34:28
內容: 如果你現在正在尋找一個跨平臺、資源開放的XML編輯器的話,您可能很快就能夠實現這個愿望了。在這個三部分系列文章中,我將帶您利用一些最通常的Java 2 Swing組件開發一個簡單的 XML編輯器。本系列將有益于那些想編寫他們的自己的XML編輯器的朋友或者幫助您學習或溫習Swing。 這是本系列的第三篇文章。在第一個篇文章中,我們簡要地討論了XML和為什么樹形結構適合顯示XML、如何處理XML 數據、如何使用JTree Swing組件,并且我們還構建一個可重用組件用來解析XML文件并在JTree中顯示數據。 在第二篇文章中,我們創建了用于我們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 newMenuHandlerclass 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() {super();jfc = new JFileChooser();jfc.setSize( 400,300 );jfc.setFileFilter( new XmlFileFilter() ); parent = openItem.getParent(); } public void actionPerformed( ActionEvent ae ) {choice = jfc.showOpenDialog( parent ); if ( choice == JFileChooser.APPROVE_OPTION ){ String fileName, line; BufferedReader reader; fileName = jfc.getSelectedFile().getAbsolutePath(); try {reader = new BufferedReader(new FileReader( fileName ) );textArea.setText( reader.readLine() + 'n' );while ( ( line = reader.readLine() ) != null ){ textArea.append( line + 'n' );} reader.close(); xTree.refresh( textArea.getText() );}catch ( Exception ex ){ String message = ex.getMessage(); ex.printStackTrace();}jfc.setCurrentDirectory( new File( fileName ) );} }}class saveMenuHandler implements ActionListener {JFileChooser jfc;Container parent;int choice;saveMenuHandler(){ super(); jfc = new JFileChooser(); jfc.setSize( 400,300 ); jfc.setFileFilter( new XmlFileFilter() ); parent = saveItem.getParent();} public void actionPerformed( ActionEvent ae ) { choice = jfc.showSaveDialog( parent );if ( choice == JFileChooser.APPROVE_OPTION ){ String fileName; File fObj; FileWriter writer; fileName = jfc.getSelectedFile().getAbsolutePath(); try {writer = new FileWriter( fileName );textArea.write( writer );writer.close(); } catch ( IOException ioe ) {ioe.printStackTrace(); } jfc.setCurrentDirectory( new File( fileName ) );} }}class exitMenuHandler implements ActionListener{ public void actionPerformed( ActionEvent ae ) {verifyDialog.show(); }}class XmlFileFilter extends javax.swing.filechooser.FileFilter{ public boolean accept( File fobj ) {if ( fobj.isDirectory() ) return true;else return fobj.getName().endsWith( '.xml' );}public String getDescription(){ return '*.xml';}} Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品不卡| 午夜电影亚洲| 免费在线观看不卡| 免费在线观看视频一区| japanese国产精品| 久久亚洲二区| 日本免费在线视频不卡一不卡二| 日本va欧美va瓶| 香蕉久久一区| 麻豆一区二区三区| 日本一区二区高清不卡| 99精品电影| 综合精品一区| 精品一区视频| 亚州av乱码久久精品蜜桃| 久久国产99| 国产精品久久久免费| 精品欧美日韩精品| 久久在线电影| 亚洲精品乱码久久久久久蜜桃麻豆| 国产亚洲人成a在线v网站| 成人午夜在线| 亚洲午夜电影| 日韩在线电影| 美腿丝袜亚洲一区| 欧美日韩精品一区二区视频| 深夜日韩欧美| 日韩毛片视频| 亚洲精品免费观看| 女生影院久久| 日韩成人在线看| 久久影视一区| 国产精品天堂蜜av在线播放| 国产中文一区| 国产精品色在线网站| 国产 日韩 欧美一区| 亚洲精品一级| 久久国产影院| 青青草视频一区| 日韩在线观看不卡| 日韩精品一区二区三区中文字幕| 国产精品久久久久蜜臀| 亚洲日韩视频| 国产99精品一区| 国产精品片aa在线观看| 国产精品av久久久久久麻豆网| 国产伦精品一区二区三区千人斩 | 国产精品密蕾丝视频下载| 久久精品青草| 国产精久久一区二区| 久久蜜桃av| 国产精品久久久久久av公交车| 午夜国产欧美理论在线播放| 久久久国产精品网站| 麻豆91精品| 综合干狼人综合首页| 久久永久免费| 天堂久久av| 欧美va天堂在线| 久久av偷拍| 日韩一区精品| 在线综合欧美| 欧美日韩亚洲在线观看| 美女视频黄久久| 日韩欧美久久| 久久精品av麻豆的观看方式| 日韩视频在线一区二区三区 | 狠狠爱www人成狠狠爱综合网| 日韩欧美午夜| 欧美激情五月| 欧美日本久久| 欧美天堂一区二区| 日韩在线电影| 最新国产精品视频| 亚洲精品123区| 欧美高清一区| 久久九九国产| 欧美sss在线视频| 麻豆国产一区| 国产精品一区免费在线| 午夜视频一区二区在线观看| 中文亚洲欧美| 99国产精品私拍| 99在线|亚洲一区二区| 免费不卡中文字幕在线| 亚洲www啪成人一区二区| 国产成人调教视频在线观看| 国产一区二区三区四区五区传媒| 欧美1区2区3| 亚洲免费一区二区| 91久久中文| 日韩一级不卡| 日韩专区欧美专区| 美女精品网站| 国产精品色在线网站| 91精品国产自产精品男人的天堂 | 日韩电影免费在线观看| 国产精品99视频| 韩国精品主播一区二区在线观看 | 97se综合| 久久精品电影| 先锋影音久久久| 亚洲欧美日韩国产综合精品二区| 99视频+国产日韩欧美| 亚洲天堂免费| 91精品国产自产精品男人的天堂 | 中日韩男男gay无套| 免费不卡在线视频| 亚洲1区在线| 欧美a在线观看| 亚洲91精品| 三级在线观看一区二区 | 99热免费精品| 日本国产一区| 精品国产99| 亚洲国产不卡| 日本a口亚洲| 精品久久视频| 九九久久电影| 日韩精品视频网站| 精品日本视频| 国产偷自视频区视频一区二区| 亚洲三级毛片| 成午夜精品一区二区三区软件| 999国产精品999久久久久久| 蜜桃久久久久久| 日韩欧美另类中文字幕| 美日韩一区二区三区| 色爱综合av| 日本亚洲欧美天堂免费| 国产成人久久精品一区二区三区| 欧美日韩精品一区二区视频| 日韩激情精品| 亚洲天堂1区| 日韩av电影一区| av一区在线| 国产日本久久| 99久久九九| 日韩不卡手机在线v区| 日韩欧美视频专区| 日韩三级一区| 电影天堂国产精品| 日韩欧美中文字幕在线视频| 日韩免费久久| 欧美在线日韩| 欧美福利在线| 精品精品99| 亚洲欧洲av| 亚洲高清久久| 精品亚洲自拍| 日韩在线麻豆| 91精品啪在线观看国产18| 国产欧美久久一区二区三区| 欧美精品黄色| 成人国产精选| 人人爱人人干婷婷丁香亚洲| 欧美日韩一区二区三区视频播放| 久久精品av麻豆的观看方式| 99在线观看免费视频精品观看| 国内揄拍国内精品久久| 亚洲人成精品久久久| 日韩福利一区| 国产精品高清一区二区| 国产一区成人| 婷婷综合六月| 国产精品一区二区三区美女 | 国产在线观看www| 日韩av电影一区| 亚洲一区久久| 日韩欧美另类一区二区| 国产日韩欧美一区在线| 亚洲一级在线| 在线观看精品| 精品一区不卡| 国产欧美日韩在线一区二区| 香蕉精品999视频一区二区| 欧美成人基地| 麻豆成全视频免费观看在线看| 国产视频一区二区在线播放| 亚洲综合图色| 激情欧美一区| 日韩一区三区| 精品国产黄a∨片高清在线| 91欧美极品| 天堂俺去俺来也www久久婷婷| 尤物网精品视频| 九一国产精品| 久久国产中文字幕| 久久精品亚洲人成影院| 丁香六月综合| 国产一区二区精品久| 欧美激情91| 久久精品网址| 免费在线日韩av| 久久激情五月激情| 日韩精品欧美成人高清一区二区| 亚洲一区二区三区在线免费| 丝袜亚洲另类欧美| 午夜在线精品偷拍| 在线国产日韩|