搜尋
首頁Javajava教程使用Java Swing 建立一個XML編輯器(三)

假如你現在正在尋找一個跨平台、資源開放的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 JMeItemItem( "File" );
JmenuItem exitItem = new JMeItemItem( "File" );
JmenuItem exitItem = new JMeItemItem( "Exit" ); .add( exitItem );

JmenuBar menuBar = new JMenuBar();
 
menuBar.add( fileMenu );

setJMenuBar( menuBar );建置時創建的。最內部的元素被加到它們的直接父元素中,直到所有的元素都已定義了一個適當的容器。

  回到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
Container parent = openItem.getParent();
int最後一行傳回的整數值指出使用者最後到底是開啟/儲存一個檔案還是按下取消按鈕。為了回應開啟/儲存事件,可以把這個整數值定義在 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( "OK" );
okButton.addActionListener( this );
Jbutton cancelButton = new JButton( "Cancel" );
cancelButton.addActionListener( this );
verifyDialog.getouta);
verifyDialog.getContentPane().add( question );
verifyDialog.getContentPane().add(Button );
verifyDialog.getContentPane().add( canButton );
verifyDialog.getContentPane().add( cancel㎜件事沒做。我們必須為這兩個按鈕編寫事件處理程式碼並將視窗關閉事件行為用之取代。就處理這兩個按鈕而言,我們只要在按下 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 )
 { ree
   xTree = new XTree ();
   xTree.getSelectionModel().setSelectionMode(  
      TreeSelectionModel.SINGLE_TREE_SELECTION ); TreeSelectionModel.SINGLE_TREE_SELECTION );》》〜〜〜〜〜〜〜〕〜〜〕〜〜〜〜〕〜); // 這個工具更進階的版本,答應修改JTree
   xTree.setEditable( false );
  }
catch( Exception ex )
  {
  String message = ex.getMessage();
  ex.printStackTrace();
  }🀜 
file ://結束類別newMenuHandler
類別openMenuHandler實作ActionListener
{
遠JFileChooser jfc;
遠容器父級;
遠int choice;
遠四openMenuHandler()
fc= at JFileChooser();
遠jfc.setSize( 400 ,300 );jfc.setFileFilter( new XmlFileFilter() );parent = openItem.getParent(); }
新檔://結束openMenuHandler(
新{
新JFileChooser jfc;
新容器父;
新選擇;

新openMenuHandler()
新{
新超級();
新j fc = new JFileCser(fc);
jfc.setFileFilter( new XmlFileFilter() );

parent = openItem.getParent();
}
public void actionPerformed( Action EventAfc) Actione;


if ( choice == JFileChooser.APPROVE_OPTION )
凡{
凡凡String fileName, line;
凡凡BufferedReader reader;

凡凡fileName = jfc.getSelectedFile().getAbsolutePath();

凡凡try
凡凡{
閱讀器= new BufferedReader(
new FileReader( fileName ) );


‍‍textArea.setText( reader.readLine() + " " );

‍‍ ‍ ‍ ‍‍‍{
‍‍‍‍‍textArea.append( line + " " );



reader.close();


xTreea.Treej. )
{





String message = ex.getMessage();
ex.printStackTrace( );
佛}


jfc.setCurrentDirectory( new File( Name
); ActionListener
【{
佛】JFileChooser jfc;
佛Containerparent;
佛int choice;

 saveMenuHandler()
  00 );


public = saveItem。  字串檔名;
文件fObj;
 FileWriter writer;

  檔案名稱= jfc.getSelectedFile() .getAbsolutePath();







Writer( fileName );







‍‍writer.close();

‍‍
‍‍catch (IOException ioe )
‍{
IOE.printStackTrace ();

⟎ }

杜}
}

類exitMenuHandler 實現ActionListener
{

public void actionPerformed( ActionEvent ae )
️{
️verifyDialog.show();
}
}
class XmlFileFilter 擴展javax.swing.filechooser.FileFilter
{
​public boolean Accept( File fobj )
{
if ( fobj.isDirectory() )
{
if ( fobj.isDirectory() )
{
if ( fobj.isDirectory() )
{
if ( fobj.isDirectory() )
{
if ( fobj.isDirectory() )
{
if ( fobj.isDirectory() )
{
if ( fobj.isDirectory() )
{
if ( fobj.isDirectory() )
{
if ( fobj.isDirectory() )
{
if ( fobj.isDirectory() )
(".xml" );
return fobj.getName().endsWith ( ".xml" );
}
String getDescription()
{

return "*.xml";

}


 以上就是使用Java Swing創建一個XML編輯器(三)的內容,更多相關內容請關注PHP中文網(www.php. .cn)! 

🎜🎜🎜
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案?Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存?Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射?Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Java的類負載機制如何起作用,包括不同的類載荷及其委託模型?Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中