黑馬程序員——圖形用戶界面GUI

------- android培訓java培訓、期待與您交流! ----------

第一講     GUI(圖形用戶界面)

一、概述

1GUIGraphicalUser Interface,即圖形用戶界面,用於計算機與用戶交互的一種方式。

2、計算機與用戶交互的兩種方式:GUICLI

        GUI Graphical User Interface,圖形用戶接口,用圖形方式,來顯示計算機操作界面,方便直觀。

        CLI Command LineUser Interface,命令行用戶接口,即常見的Dos命令行操作,須記住一些命令,操作不直觀。

3java也將這種界面封裝爲對象,其中的對象都放在了兩個包中:java.Awt包和javax.Swing包。

        java.Awt包:Abstract Window Toolkit,即抽象窗口工具包。要調用本地系統方法實現功能,屬重量級控件。

        javax.Swing包:在AWT的基礎上建立的一套圖形界面系統,其中提供了更多的組件,且完全由java實現,增強了移植性,屬輕量級控件。

 

二、繼承關係圖

 

Container:爲容器,是一個特殊的組件,該組件中可以通過add方法添加其他組件進來。

Container常用子類:Window   Panel(面板,不能單獨存在。)

Window常用子類:Frame  Dialog

 

三、佈局管理器

1、佈局:容器中的組件排列方式

2、常見的佈局管理器:

        1FlowLayout:流式佈局管理器。從左向右排列,是Panel默認的佈局管理器

        2BorderLayout:邊界式佈局管理器,東南西北中的排列方式,是Frame的默認佈局管理器。如果窗體中只有一個組件,將會覆蓋整個窗體。

        3GridLayout:網格式佈局管理器,規則的矩陣

        4CardLayout:卡片式佈局管理器,即選項卡

        5GridBayLayout:網格包佈局管理器,非規則矩陣

3、如果存在多種佈局方式,如何創建窗體界面呢?步驟:

        1)先將窗體Frame進行大區域的劃分,設置其佈局管理器,加入面板Panel

        2)將組件加入Panel,設置面板的佈局管理器。

 

四、簡單的窗體創建過程

1、創建Frame窗體:

        Frame f = new Frame("my Frame");//可設置標題,即窗體名字

2、對窗體進行基本設置:如大小,位置,佈局等:

        f.setSize(int wight,int hight);//窗體大小設置

        f.setLocation(int x,int y);//窗體顯示位置設置,橫縱座標

        f.setBounds(int x,int y,int wight,int hight),也可以直接用這個方法對大小和位置設置

        f.setLayout(Layout layout),參數爲指定的佈局管理器,如FlowLayout

3、定義組件:

       如Button b = new Button(my Button);//可設置組件的名稱

4、將組件通過窗體的add方法添加到窗體中:

        f.add(b);//將按鈕組件添加進窗體

5、讓窗體顯示:

        f.setVisible(boolean b);//通過設置參數是true還是false是否顯示窗體


五、事件監聽機制

1、組成:

        1)事件源(組件):awtswing包中的那些圖形界面組件

        2)事件(Event):每一個事件源都有自己特有的對應事件和共性事件

        3)監聽器(Listener):將可觸發某一事件的動作(不只一個動作),都封裝到偵聽器中。

        4)事件處理:引發事件後的處理方式。

 

2、使用說明

        組成的前三個在java中都已將定義好了,直接獲取其對象來用即可,我們需要做的就是對產生的動作進行處理。

步驟:

        1)確定事件源(容器或組件)。通過事件源對象的addXXXListener()方法將監聽器註冊到該事件源上。該方法中接收XXXListener的子類對象,或者XXXListener的子類XXXAdapter的子類對象。

        2一般用匿名內部類來表示。在覆蓋方法的時候,方法的參數一般是XXXEvent類型的變量接收。

說明:

        1)事件觸發後會把事件打包成對象傳遞給複寫方法中參數的變量。(其中包括事件源對象。通過getSource()或者,getComponent()獲取。)

        2)若用子類實現WindowListener接口,就需要覆蓋其中的7個方法,可只用到其中的關閉動作,其他動作未用到,但卻必須重寫全部。因爲WindowLister的子類WindowAdapter(適配器)已經實現此接口,並覆蓋了其中所有方法。那麼只需繼承WindowAdapter,覆蓋需要的方法即可。

        3)明確事件,並對事件進行處理,其實,添加什麼監聽器就需要添加什麼事件。


練習: 

[java] view plaincopy
  1. /* 
  2. 共性事件:鍵盤事件和鼠標事件 
  3.  
  4. 需求:在窗體中列出指定目錄內容 
  5. */  
  6. import java.awt.*;  
  7. import java.awt.event.*;  
  8. import java.io.*;  
  9.   
  10. class KeyAndMouseEvent   
  11. {  
  12.     //全局變量的界面組件引用  
  13.     private Frame f;  
  14.     private Button but;  
  15.     private TextField tf;  
  16.     private TextArea ta;  
  17.   
  18.     //構造函數  
  19.     KeyAndMouseEvent()  
  20.     {  
  21.         init();  
  22.     }  
  23.   
  24.     //窗體創建與功能實現  
  25.     public void init()  
  26.     {  
  27.         //組件實例化  
  28.         f=new Frame("my fame");  
  29.         but=new Button("跳轉");  
  30.         tf=new TextField(50);  
  31.         ta=new TextArea(30,58);  
  32.   
  33.         //窗體基本設置  
  34.         f.setBounds(300,150,500,500);  
  35.         f.setLayout(new FlowLayout());  
  36.   
  37.         //添加組件  
  38.         f.add(tf);  
  39.         f.add(but);  
  40.         f.add(ta);  
  41.   
  42.         //窗體事件  
  43.         myEvent();  
  44.           
  45.         //窗體顯示  
  46.         f.setVisible(true);  
  47.     }  
  48.   
  49.     //註冊事件  
  50.     public void myEvent()  
  51.     {  
  52.         //窗體關閉功能  
  53.         f.addWindowListener(new WindowAdapter()  
  54.         {  
  55.             public void windowClosing(WindowEvent e)  
  56.             {  
  57.                 System.exit(0);  
  58.             }  
  59.         });  
  60.   
  61.         /* 
  62.         //鼠標活動事件 
  63.         but.addActionListener(new ActionListener() 
  64.         { 
  65.             public void actionPerformed(ActionEvent e) 
  66.             { 
  67.                 System.out.println("按鈕在動");  
  68.             } 
  69.         }); 
  70.         */  
  71.   
  72.         //鼠標事件  
  73.         but.addMouseListener(new MouseAdapter()  
  74.         {  
  75.             //int count=0;  
  76.             public void mouseClicked(MouseEvent e)  
  77.             {  
  78.             //  if(e.getClickCount()==2)  
  79.             //      System.out.println("鼠標雙擊按鈕");  
  80.   
  81.             //  System.out.println("鼠標單擊按鈕");  
  82.                 //System.exit(0);  
  83.   
  84.                 showFile();//顯示到文本區中  
  85.             }  
  86.             /* 
  87.             public void mouseEntered(MouseEvent e) 
  88.             { 
  89.                 System.out.println("鼠標放進入按鈕範圍"+(++count)+"次"); 
  90.             } 
  91.             */  
  92.         });  
  93.   
  94.         /* 
  95.         //按鈕鍵盤事件 
  96.         but.addKeyListener(new KeyAdapter() 
  97.         { 
  98.             public void keyPressed(KeyEvent e) 
  99.             { 
  100.                 //捕獲同時按下ctrl+entry 
  101.                 if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER) 
  102.                     System.out.println("Ctrl+Enter.....is Down"); 
  103.                  
  104.                 //System.out.println(e.getKeyText(e.getKeyCode())+"---"+e.getKeyCode());     
  105.             } 
  106.         }); 
  107.         */  
  108.   
  109.         //文本框鍵盤事件  
  110.         tf.addKeyListener(new KeyAdapter()  
  111.         {  
  112.             public void keyPressed(KeyEvent e)  
  113.             {  
  114.                 /* 
  115.                 //判斷輸入字符是否是數字 
  116.                 if(e.getKeyCode()<KeyEvent.VK_0||e.getKeyCode()>KeyEvent.VK_9) 
  117.                 { 
  118.                     System.out.println("你輸入的數字非法,請重數"); 
  119.                     e.consume();//不顯示輸入的字符 
  120.                 } 
  121.                 */  
  122.   
  123.                 if(e.getKeyCode()==KeyEvent.VK_ENTER)  
  124.                     showFile();//將目錄下的內容顯示到文本區中  
  125.             }  
  126.         });  
  127.     }  
  128.   
  129.     //將路徑下的目錄或文件列出  
  130.     private void showFile()  
  131.     {  
  132.         String path=tf.getText();//獲取文本框內容  
  133.         File file=new File(path);//將路徑封裝成文件對象  
  134.         //判斷是否存在  
  135.         if(file.exists())  
  136.         {  
  137.             ta.setText("");//清空文本區中的內容  
  138.             //如果是目錄  
  139.             if(file.isDirectory())  
  140.             {  
  141.                 String[] dir=file.list();//列出目錄下的文件和目錄  
  142.                 //遍歷  
  143.                 for (String name : dir)  
  144.                 {  
  145.                     ta.append(name+"\r\n");//添加到文本區中  
  146.                 }  
  147.             }  
  148.             else  
  149.                 ta.append(file.getName());//如果是文件,則只顯示該文件的名字  
  150.         }  
  151.         else  
  152.             System.out.println("您輸入的路徑不存在,請重輸或者去醫院");  
  153.     }  
  154.       
  155.   
  156.     public static void main(String[] args)   
  157.     {  
  158.         //運行窗體  
  159.         new KeyAndMouseEvent();  
  160.     }  
  161. }  

 

第二講     應用

一、對話框:Dialog

        何時需要產生對話框:此對象時需要在調用時,才創建對象。如:當在誤操作的時候,就需要出現提示錯誤信息的對話框,此時才創建的這個對象。

示例:

        對列出指定目錄內容示例的功能增強。

[java] view plaincopy
  1. /* 
  2. 列出指定目錄下的內容,當輸入的路徑不正確時,給出錯誤提示信息。 
  3. */  
  4.   
  5. import java.io.*;  
  6. import java.awt.*;  
  7. import java.awt.event.*;  
  8.   
  9. class MyWindowDemo   
  10. {  
  11.     //定義所需組件引用  
  12.     private Frame f;  
  13.     private Button but,bok;  
  14.     private TextField tf;  
  15.     private TextArea ta;  
  16.     private Dialog d;  
  17.     private Label lab;  
  18.   
  19.     //構造函數  
  20.     MyWindowDemo()  
  21.     {  
  22.         init();  
  23.     }  
  24.   
  25.     //窗體基本設置於功能實現  
  26.     public void init()  
  27.     {  
  28.         //組件實例化  
  29.         f=new Frame("我的Window");  
  30.         but=new Button("跳轉");  
  31.         tf=new TextField(50);  
  32.         ta=new TextArea(30,60);  
  33.   
  34.         //基本設置  
  35.         f.setBounds(300,150,500,500);  
  36.         f.setLayout(new FlowLayout());  
  37.   
  38.         //添加組件  
  39.         f.add(tf);  
  40.         f.add(but);  
  41.         f.add(ta);  
  42.   
  43.         //窗體事件  
  44.         myEvent();  
  45.   
  46.         //窗體顯示  
  47.         f.setVisible(true);  
  48.     }  
  49.   
  50.     //註冊事件  
  51.     public void myEvent()  
  52.     {  
  53.         //窗體關閉功能  
  54.         f.addWindowListener(new WindowAdapter()  
  55.         {  
  56.             public void windowClosing(WindowEvent e)  
  57.             {  
  58.                 System.exit(0);  
  59.             }  
  60.         });  
  61.   
  62.         //“跳轉”按鈕事件  
  63.         but.addActionListener(new ActionListener()  
  64.         {  
  65.             public void actionPerformed(ActionEvent e)  
  66.             {  
  67.                 showFile();//列出目錄內容在文本區中  
  68.             }  
  69.         });  
  70.   
  71.           
  72.   
  73.         //文本框鍵盤事件  
  74.         tf.addKeyListener(new KeyAdapter()  
  75.         {  
  76.             public void keyPressed(KeyEvent e)  
  77.             {  
  78.                 //如果鍵盤按下Enter鍵,就將目錄內容顯示在文本區中  
  79.                 if(e.getKeyCode()==KeyEvent.VK_ENTER)  
  80.                     showFile();  
  81.             }  
  82.         });  
  83.     }  
  84.   
  85.     //目錄內容顯示在文本區中方法  
  86.         private void showFile()  
  87.         {  
  88.             String path=tf.getText();//獲取輸入的路徑  
  89.             File dir=new File(path);//將路徑封裝成對象  
  90.             //判斷輸入的路徑是否存在,且是否是文件夾  
  91.             if (dir.exists()&&dir.isDirectory())  
  92.             {  
  93.                 ta.setText("");//清空文本區中的內容---------  
  94.                   
  95.                 String names[]=dir.list();//列出目錄下的內容  
  96.                 //遍歷  
  97.                 for (String name : names )  
  98.                 {  
  99.                     ta.append(name+"\r\n");//添加進文本區中  
  100.                 }  
  101.             }  
  102.             else  
  103.             {  
  104.                 //對話框基本設置  
  105.                 d=new Dialog(f,"錯誤提示",true);  
  106.                 d.setBounds(400,200,280,150);  
  107.                 d.setLayout(new FlowLayout());  
  108.   
  109.                 bok=new Button("確定");  
  110.                 lab=new Label();  
  111.   
  112.                 //添加按鈕和文本  
  113.                 d.add(bok);  
  114.                 d.add(lab);  
  115.   
  116.   
  117.                 //對話框關閉事件  
  118.                 d.addWindowListener(new WindowAdapter()  
  119.                 {  
  120.                     public void windowClosing(WindowEvent e)  
  121.                     {  
  122.                         d.setVisible(false);//退出對話框  
  123.                     }  
  124.                 });  
  125.   
  126.                 //“確定”按鈕事件  
  127.                 bok.addActionListener(new ActionListener()  
  128.                 {  
  129.                     public void actionPerformed(ActionEvent e)  
  130.                     {  
  131.                         d.setVisible(false);//按確認鍵,退出對話框  
  132.                     }  
  133.                 });  
  134.   
  135.   
  136.                 String info="您輸入的路徑:"+path+"是錯誤的,請重輸!";  
  137.   
  138.                 lab.setText(info);//設置標籤文本內容  
  139.                 d.setVisible(true);//顯示對話框  
  140.             }  
  141.         }  
  142.   
  143.     public static void main(String[] args)   
  144.     {  
  145.         //運行窗體  
  146.         new MyWindowDemo();  
  147.     }  
  148. }  


二、菜單:Menu

1、菜單繼承關係

       

2、說明

        1Menu:菜單,繼承MenuItem;有右三角的圖標存在,可添加MenuMenuItem

        2MenuBar:菜單欄,可添加菜單和菜單條目。一般先創建菜單欄,再創建菜單。

        3MenuItem:菜單條目,也稱菜單項,無右三角的圖標存在,是最終的菜單項。

        4)菜單的事件處理和組件一樣,可以對類型爲MenuItemMenu的對象這個事件源添加活動監聽ActionListener,並進行相關的事件處理。

        5)通過setMenuBar()方法,將菜單添加到Frame中。

示例: 

[java] view plaincopy
  1. import java.awt.*;  
  2. import java.awt.event.*;  
  3.   
  4. class MyMenuDemo   
  5. {  
  6.     //定義組件引用  
  7.     private Frame f;  
  8.     private MenuBar mb;  
  9.     private Menu m,subMenu;  
  10.     private MenuItem closeItem,subItem;  
  11.     //構造函數  
  12.     MyMenuDemo()  
  13.     {  
  14.         init();  
  15.     }  
  16. //窗體設置與功能實現   
  17.     public void init()  
  18.     {  
  19.         //窗體設置  
  20. f = new Frame("my window");  
  21.         f.setBounds(300,100,500,600);  
  22.         f.setLayout(new FlowLayout());  
  23.       
  24.         mb = new MenuBar();//創建菜單條  
  25.         m = new Menu("文件");//創建菜單  
  26.         subMenu = new Menu("子菜單");//菜單下面的子菜單  
  27.   
  28.         subItem = new MenuItem("子條目");//子菜單包含的菜單條目  
  29.         closeItem = new MenuItem("退出");//菜單包含的條目  
  30.           
  31. //菜單添加菜單組件  
  32.         subMenu.add(subItem);  
  33.         m.add(subMenu);  
  34.         m.add(closeItem);  
  35.         mb.add(m);  
  36.         //窗體添加菜單組件  
  37.         f.setMenuBar(mb);  
  38.         //窗體上事件  
  39.         myEvent();  
  40.         //窗體顯示  
  41.         f.setVisible(true);  
  42.     }  
  43.     private void myEvent()  
  44.     {  
  45.         //關閉菜單具備關閉事件  
  46.         closeItem.addActionListener(new ActionListener()  
  47.         {  
  48.             public void actionPerformed(ActionEvent e)  
  49.             {  
  50.                 System.exit(0);  
  51.             }  
  52.         });  
  53.         //窗體關閉功能  
  54.         f.addWindowListener(new WindowAdapter()  
  55.         {  
  56.             public void windowClosing(WindowEvent e)  
  57.             {  
  58.                 System.exit(0);   
  59.             }  
  60.         });  
  61.     }  
  62.       
  63.     public static void main(String[] args)   
  64.     {  
  65.         new MyMenuDemo();  
  66.     }  
  67. }  

 

三、jar包雙擊執行

        既然是圖形化界面,就需要通過圖形化界面的形式運行程序,而不是是用Dos命令行執行,那麼如何通過雙擊程序就執行程序呢?這就需要將程序的class文件打包。

步驟如下:

        1、首先要在java文件中導入一個包,沒有則需創建一個包,如package mymenu;

        2、生成包:通過編譯javac -d c:\myclass MyMenu.java,此時則在c盤下的myclass文件夾下生成了所有的.class文件

        3、在此目錄下新建一個文件,如1.txt或者其他任意名稱任意擴展名的文件都可,然後在其中編輯固定的格式:“Main-Class: mymenu.MenuDemo”,只寫引號中的內容。需要需要在冒號後有一個空格,在文件末尾要回車。

        4、編譯:jar -cvfm my.jar 1.txt mymenu即可。如果想添加其他信息,則直接編譯jar即可得出相應的命令

        5、此時雙擊即可執行。

說明:

        1)在固定格式中:

                a、如果無空格:在編譯的時候,就會報IO異常,提示無效的頭字段,即invalidheader field。這說明1.txt在被IO流讀取。

                b、如果無回車:在列表清單.MF中不會加入相應的加載主類的信息,也就是說配置清單的屬性主類名稱不會加載進清單中,也就不會執行。

        2jar文件必須在系統中註冊,才能運行。註冊方法如下:

        A.對於XP系統:

               a.打開任意對話框,在菜單欄點擊工具按鈕,選擇文件夾選項

               b.選擇新建--->擴展名,將擴展名設置爲jar,確定

               c.選擇高級,可更改圖標,然後點擊新建,命名爲open

               d.在用於可執行應用程序中,點瀏覽,將jdk下的bin的整個文件路徑添加進來,並在路徑後添加-jar即可。

        B.對於win7系統:

               a.改變打開方式:右擊.jar文件,點擊打開方式,選擇默認程序爲jdkbin中的javaw.exe應用程序。

               b.修改關聯程序的註冊表:打開註冊表(win+r),找到註冊表路徑\HKEY_CLASSES_ROOT\Aplications\javaw.exe\shell\open\command下的字符串值,右擊點修改,在原路徑的中添加-jar,如:"C:\ProgramFiles\Java\jre6\bin\javaw.exe" -jar "%1",注意-jar兩邊要有空格,保存。

              c.雙擊即可執行jar程序,如果仍不能執行,則需下載最新版的jdk

示例:

[java] view plaincopy
  1. /* 
  2. 練習:利用Menu組件完成一個簡單的記事本程序。 
  3. 需求:具有文件菜單,文件中有打開,保存和退出功能。將寫好的程序變爲雙擊可執行的程序。 
  4. */  
  5.   
  6. package mymenu;  
  7. import java.awt.*;  
  8. import java.awt.event.*;  
  9. import java.io.*;  
  10.   
  11. class MyMenuText  
  12. {  
  13.     //定義組件引用  
  14.     private Frame f;  
  15.     private TextArea ta;  
  16.     private MenuBar mb;  
  17.     private Menu fileMe;  
  18.     private MenuItem openMi,saveMi,otherSaveMi,closeMi;  
  19.   
  20.     private FileDialog openDia,saveDia;  
  21.   
  22.     private File file;  
  23.   
  24.     //構造函數  
  25.     MyMenuText()  
  26.     {  
  27.         init();  
  28.     }  
  29.   
  30.     //功能實現  
  31.     private void init()  
  32.     {  
  33.         //組件實例化  
  34.         f=new Frame("MyText");  
  35.         ta=new TextArea();  
  36.           
  37.         mb=new MenuBar();  
  38.         fileMe=new Menu("文件");  
  39.         openMi=new MenuItem("打開");  
  40.         saveMi=new MenuItem("保存");  
  41.         otherSaveMi=new MenuItem("另存爲");  
  42.         closeMi=new MenuItem("退出");  
  43.   
  44.         openDia=new FileDialog(f,"選擇打開的文件",FileDialog.LOAD);  
  45.         saveDia=new FileDialog(f,"保存到哪裏",FileDialog.SAVE);  
  46.   
  47.         //基本設置  
  48.         f.setBounds(300,150,600,500);  
  49.   
  50.         //添加組件  
  51.         f.add(ta);  
  52.         f.setMenuBar(mb);  
  53.   
  54.         mb.add(fileMe);  
  55.         fileMe.add(openMi);  
  56.         fileMe.add(saveMi);  
  57.         fileMe.add(otherSaveMi);  
  58.         fileMe.add(closeMi);  
  59.   
  60.         //窗體中事件  
  61.         myEvent();  
  62.   
  63.         //窗體顯示  
  64.         f.setVisible(true);  
  65.     }  
  66.   
  67.     private void myEvent()  
  68.     {  
  69.         //窗體關閉功能  
  70.         f.addWindowListener(new WindowAdapter()  
  71.         {  
  72.             public void windowClosing(WindowEvent e)  
  73.             {  
  74.                 System.exit(0);  
  75.             }  
  76.         });  
  77.   
  78.         //打開事件  
  79.         openMi.addActionListener(new ActionListener()  
  80.         {  
  81.             public void actionPerformed(ActionEvent e)  
  82.             {  
  83.                 //顯示文件對話窗口  
  84.                 openDia.setVisible(true);//------------------  
  85.                 String dir=openDia.getDirectory();//獲取目錄  
  86.                 String fileName=openDia.getFile();//獲取文件名  
  87.                   
  88.                 if(dir==null||fileName==null)//對打開了文件對話框,但未做出操作的處理  
  89.                     return;  
  90.           
  91.                 file=new File(dir,fileName);//文件對象  
  92.                 try  
  93.                 {  
  94.                     ta.setText("");//每打開一個文件時,將文本區的內容清空  
  95.                     //帶緩衝技術的讀取流  
  96.                     BufferedReader br=new BufferedReader(new FileReader(file));  
  97.                     String line=null;//讀一行  
  98.                     while ((line=br.readLine())!=null)  
  99.                     {  
  100.                         //添加到文本區域  
  101.                         ta.append(line+"\r\n");  
  102.                     }  
  103.                     br.close();//關流  
  104.                 }  
  105.                 catch (IOException ie)  
  106.                 {  
  107.                     throw new RuntimeException("文件打開失敗");  
  108.                 }  
  109.             }  
  110.         });  
  111.   
  112.         //保存事件  
  113.         saveMi.addActionListener(new ActionListener()  
  114.         {  
  115.             public void actionPerformed(ActionEvent e)  
  116.             {  
  117.                 //如果是第一次保存,則顯示文件對話框  
  118.                 if(file==null)//-------------  
  119.                 {  
  120.                     //顯示文件對話框  
  121.                     saveDia.setVisible(true);//----------------------  
  122.                     String dir=saveDia.getDirectory();  
  123.                     String filename=saveDia.getFile();  
  124.                       
  125.                     if(dir==null||filename==null)//--------------------  
  126.                         return;  
  127.   
  128.                     file=new File(dir,filename);  
  129.                       
  130.                 }  
  131.                 save();//保存文件方法  
  132.             }  
  133.         });  
  134.           
  135.         //另存爲事件  
  136.         otherSaveMi.addActionListener(new ActionListener()  
  137.         {  
  138.             public void actionPerformed(ActionEvent e)  
  139.             {  
  140.                 //不管是不是第一次保存,都顯示文件對話框  
  141.                 saveDia.setVisible(true);//----------------------  
  142.                 String dir=saveDia.getDirectory();  
  143.                 String filename=saveDia.getFile();  
  144.   
  145.                 if(dir==null||filename==null)//--------------------  
  146.                     return;  
  147.   
  148.                 file=new File(dir,filename);  
  149.   
  150.                 save();//保存文件方法  
  151.                 //保存時,默認文件對話框位置在打開文件的位置  
  152.                 openDia.setFile(file.getName());  
  153.             }  
  154.         });  
  155.   
  156.         //退出事件  
  157.         closeMi.addActionListener(new ActionListener()  
  158.         {  
  159.             public void actionPerformed(ActionEvent e)  
  160.             {  
  161.                 System.exit(0);  
  162.             }  
  163.         });  
  164.     }  
  165.       
  166.     //保存文件  
  167.     private void save()  
  168.     {             
  169.         try  
  170.         {  
  171.             //帶緩衝區的寫入流  
  172.             BufferedWriter bw=new BufferedWriter(new FileWriter(file));  
  173.             //獲取文本區域中的內容  
  174.             String text=ta.getText();  
  175.             bw.write(text);//寫入文件中  
  176.             bw.close();//關流  
  177.   
  178.         }  
  179.         catch (IOException ie)  
  180.         {  
  181.             throw new RuntimeException("文件保存失敗");  
  182.         }  
  183.     }  
  184.   
  185.     public static void main(String[] args)   
  186.     {  
  187.         //程序運行  
  188.         new MyMenuText();  
  189.     }  
  190. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章