黑馬程序員——淺談java中的GUI(用戶圖形界面)

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------

一、概述

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是否顯示窗體

示例:

import java.awt.*;

class AwtFirstDemo 
{
	public static void main(String[] args) 
	{
		//創建Frame窗體:
		Frame f = new Frame("my Frame");//可設置標題

		//對窗體進行基本設置:如大小,位置,佈局等:
		f.setSize(500,100);//窗體大小設置
		f.setLocation(300,150);//窗體顯示位置設置,橫縱座標 

	   // f.setBounds(int x,int y,int wight,int hight);//也可以直接用這個方法對大小和位置設置
		
		f.setLayout(new FlowLayout());//參數爲指定的佈局管理器,如FlowLayout
		
		//定義組件:
		Button b = new Button("my Button");//可設置組件的名稱
		
		//將組件通過窗體的add方法添加到窗體中:
		f.add(b);//將按鈕組件添加進窗體
		
		//讓窗體顯示:
		f.setVisible(true);//通過設置參數是true還是false是否顯示窗體
	}
}


五、事件監聽機制

1、組成:

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

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

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

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

 

2、使用說明

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

步驟:

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

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

如:

f.addWindowlistener(new WindowAdapter()
{
     public void windowClosing(WindowEvent e)
     {
          System.exit(0);//表示關閉窗口
     }
});

說明:

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

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

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

示例:

/*
需求:讓窗體的關閉功能實現
	  讓按鈕也具備退出程序的功能
*/

import java.awt.*;
import java.awt.event.*;

class  AwtEventDemo
{
	//定義該圖形界面所需的組件的引用
	private Frame f=null;
	private Button but=null;

	//初始構造函數
	AwtEventDemo()
	{
		init();
	}

	//窗體創建與功能實現
	public void init()
	{
		//實例化組件
		f=new Frame("my Frame");
		but=new Button("my Botton");

		//窗口的基本設置
		//f.setSize(500,300);//設置大小
		//f.setLocation(300,200);//窗口初始顯示位置
		f.setBounds(350,300,300,200);//一起設置窗體大小和位置
		f.setLayout(new FlowLayout());//設置爲流式佈局

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

		//加載窗體上事件
		myEvent();

		//顯示窗體
		f.setVisible(true);

	}

	//註冊事件
	private void myEvent()
	{
		//窗體的關閉功能
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.out.println("窗口關閉");
				System.exit(0);//關閉窗口程序
			}
		});

		//讓按鈕具備退出程序的功能
		/*
		按鈕就是事件源。
		那麼選擇哪個監聽器呢?
		通過關閉窗體示例瞭解到,想要知道哪個組件具備什麼樣的特有監聽器。
		需要查看該組件對象的功能。
		 通過查閱button的描述。發現按鈕支持一個特有監聽addActionListener。
		 */
		but.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("按鈕控制窗口關閉");
				System.exit(0);//關閉窗口程序
			}
		});
	}

	public static void main(String[] args) 
	{
		//運行窗體程序
		new AwtEventDemo();
	}
}

練習: 

/*
共性事件:鍵盤事件和鼠標事件

需求:在窗體中列出指定目錄內容
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class KeyAndMouseEvent 
{
	//全局變量的界面組件引用
	private Frame f;
	private Button but;
	private TextField tf;
	private TextArea ta;

	//構造函數
	KeyAndMouseEvent()
	{
		init();
	}

	//窗體創建與功能實現
	public void init()
	{
		//組件實例化
		f=new Frame("my fame");
		but=new Button("跳轉");
		tf=new TextField(50);
		ta=new TextArea(30,58);

		//窗體基本設置
		f.setBounds(300,150,500,500);
		f.setLayout(new FlowLayout());

		//添加組件
		f.add(tf);
		f.add(but);
		f.add(ta);

		//窗體事件
		myEvent();
		
		//窗體顯示
		f.setVisible(true);
	}

	//註冊事件
	public void myEvent()
	{
		//窗體關閉功能
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});

		/*
		//鼠標活動事件
		but.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("按鈕在動");	
			}
		});
		*/

		//鼠標事件
		but.addMouseListener(new MouseAdapter()
		{
			//int count=0;
			public void mouseClicked(MouseEvent e)
			{
			//	if(e.getClickCount()==2)
			//		System.out.println("鼠標雙擊按鈕");

			//	System.out.println("鼠標單擊按鈕");
				//System.exit(0);

				showFile();//顯示到文本區中
			}
			/*
			public void mouseEntered(MouseEvent e)
			{
				System.out.println("鼠標放進入按鈕範圍"+(++count)+"次");
			}
			*/
		});

		/*
		//按鈕鍵盤事件
		but.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				//捕獲同時按下ctrl+entry
				if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
					System.out.println("Ctrl+Enter.....is Down");
				
				//System.out.println(e.getKeyText(e.getKeyCode())+"---"+e.getKeyCode());	
			}
		});
		*/

		//文本框鍵盤事件
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				/*
				//判斷輸入字符是否是數字
				if(e.getKeyCode()<KeyEvent.VK_0||e.getKeyCode()>KeyEvent.VK_9)
				{
					System.out.println("你輸入的數字非法,請重數");
					e.consume();//不顯示輸入的字符
				}
				*/

				if(e.getKeyCode()==KeyEvent.VK_ENTER)
					showFile();//將目錄下的內容顯示到文本區中
			}
		});
	}

	//將路徑下的目錄或文件列出
	private void showFile()
	{
		String path=tf.getText();//獲取文本框內容
		File file=new File(path);//將路徑封裝成文件對象
		//判斷是否存在
		if(file.exists())
		{
			ta.setText("");//清空文本區中的內容
			//如果是目錄
			if(file.isDirectory())
			{
				String[] dir=file.list();//列出目錄下的文件和目錄
				//遍歷
				for (String name : dir)
				{
					ta.append(name+"\r\n");//添加到文本區中
				}
			}
			else
				ta.append(file.getName());//如果是文件,則只顯示該文件的名字
		}
		else
			System.out.println("您輸入的路徑不存在,請重輸或者去醫院");
	}
	

	public static void main(String[] args) 
	{
		//運行窗體
		new KeyAndMouseEvent();
	}
}

 應用

一、對話框:Dialog

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

示例:

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

/*
列出指定目錄下的內容,當輸入的路徑不正確時,給出錯誤提示信息。
*/

import java.io.*;
import java.awt.*;
import java.awt.event.*;

class MyWindowDemo 
{
	//定義所需組件引用
	private Frame f;
	private Button but,bok;
	private TextField tf;
	private TextArea ta;
	private Dialog d;
	private Label lab;

	//構造函數
	MyWindowDemo()
	{
		init();
	}

	//窗體基本設置於功能實現
	public void init()
	{
		//組件實例化
		f=new Frame("我的Window");
		but=new Button("跳轉");
		tf=new TextField(50);
		ta=new TextArea(30,60);

		//基本設置
		f.setBounds(300,150,500,500);
		f.setLayout(new FlowLayout());

		//添加組件
		f.add(tf);
		f.add(but);
		f.add(ta);

		//窗體事件
		myEvent();

		//窗體顯示
		f.setVisible(true);
	}

	//註冊事件
	public void myEvent()
	{
		//窗體關閉功能
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});

		//“跳轉”按鈕事件
		but.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				showFile();//列出目錄內容在文本區中
			}
		});

		

		//文本框鍵盤事件
		tf.addKeyListener(new KeyAdapter()
		{
			public void keyPressed(KeyEvent e)
			{
				//如果鍵盤按下Enter鍵,就將目錄內容顯示在文本區中
				if(e.getKeyCode()==KeyEvent.VK_ENTER)
					showFile();
			}
		});
	}

	//目錄內容顯示在文本區中方法
		private void showFile()
		{
			String path=tf.getText();//獲取輸入的路徑
			File dir=new File(path);//將路徑封裝成對象
			//判斷輸入的路徑是否存在,且是否是文件夾
			if (dir.exists()&&dir.isDirectory())
			{
				ta.setText("");//清空文本區中的內容---------
				
				String names[]=dir.list();//列出目錄下的內容
				//遍歷
				for (String name : names )
				{
					ta.append(name+"\r\n");//添加進文本區中
				}
			}
			else
			{
				//對話框基本設置
				d=new Dialog(f,"錯誤提示",true);
				d.setBounds(400,200,280,150);
				d.setLayout(new FlowLayout());

				bok=new Button("確定");
				lab=new Label();

				//添加按鈕和文本
				d.add(bok);
				d.add(lab);


				//對話框關閉事件
				d.addWindowListener(new WindowAdapter()
				{
					public void windowClosing(WindowEvent e)
					{
						d.setVisible(false);//退出對話框
					}
				});

				//“確定”按鈕事件
				bok.addActionListener(new ActionListener()
				{
					public void actionPerformed(ActionEvent e)
					{
						d.setVisible(false);//按確認鍵,退出對話框
					}
				});


				String info="您輸入的路徑:"+path+"是錯誤的,請重輸!";

				lab.setText(info);//設置標籤文本內容
				d.setVisible(true);//顯示對話框
			}
		}

	public static void main(String[] args) 
	{
		//運行窗體
		new MyWindowDemo();
	}
}


二、菜單:Menu

1、菜單繼承關係

      

2、說明

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

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

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

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

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

示例: 

  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. }  
import java.awt.*;
import java.awt.event.*;

class MyMenuDemo 
{
	//定義組件引用
	private Frame f;
	private MenuBar mb;
	private Menu m,subMenu;
	private MenuItem closeItem,subItem;
	//構造函數
	MyMenuDemo()
	{
		init();
	}
//窗體設置與功能實現	
	public void init()
	{
		//窗體設置
f = new Frame("my window");
		f.setBounds(300,100,500,600);
		f.setLayout(new FlowLayout());
	
		mb = new MenuBar();//創建菜單條
		m = new Menu("文件");//創建菜單
		subMenu = new Menu("子菜單");//菜單下面的子菜單

		subItem = new MenuItem("子條目");//子菜單包含的菜單條目
		closeItem = new MenuItem("退出");//菜單包含的條目
		
//菜單添加菜單組件
		subMenu.add(subItem);
		m.add(subMenu);
		m.add(closeItem);
		mb.add(m);
		//窗體添加菜單組件
		f.setMenuBar(mb);
		//窗體上事件
		myEvent();
		//窗體顯示
		f.setVisible(true);
	}
	private void myEvent()
	{
		//關閉菜單具備關閉事件
		closeItem.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
		//窗體關閉功能
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);	
			}
		});
	}
	
	public static void main(String[] args) 
	{
		new MyMenuDemo();
	}
}

 

三、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

示例:

/*
練習:利用Menu組件完成一個簡單的記事本程序。
需求:具有文件菜單,文件中有打開,保存和退出功能。將寫好的程序變爲雙擊可執行的程序。
*/

package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

class MyMenuText
{
	//定義組件引用
	private Frame f;
	private TextArea ta;
	private MenuBar mb;
	private Menu fileMe;
	private MenuItem openMi,saveMi,otherSaveMi,closeMi;

	private FileDialog openDia,saveDia;

	private File file;

	//構造函數
	MyMenuText()
	{
		init();
	}

	//功能實現
	private void init()
	{
		//組件實例化
		f=new Frame("MyText");
		ta=new TextArea();
		
		mb=new MenuBar();
		fileMe=new Menu("文件");
		openMi=new MenuItem("打開");
		saveMi=new MenuItem("保存");
		otherSaveMi=new MenuItem("另存爲");
		closeMi=new MenuItem("退出");

		openDia=new FileDialog(f,"選擇打開的文件",FileDialog.LOAD);
		saveDia=new FileDialog(f,"保存到哪裏",FileDialog.SAVE);

		//基本設置
		f.setBounds(300,150,600,500);

		//添加組件
		f.add(ta);
		f.setMenuBar(mb);

		mb.add(fileMe);
		fileMe.add(openMi);
		fileMe.add(saveMi);
		fileMe.add(otherSaveMi);
		fileMe.add(closeMi);

		//窗體中事件
		myEvent();

		//窗體顯示
		f.setVisible(true);
	}

	private void myEvent()
	{
		//窗體關閉功能
		f.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});

		//打開事件
		openMi.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				//顯示文件對話窗口
				openDia.setVisible(true);//------------------
				String dir=openDia.getDirectory();//獲取目錄
				String fileName=openDia.getFile();//獲取文件名
				
				if(dir==null||fileName==null)//對打開了文件對話框,但未做出操作的處理
					return;
		
				file=new File(dir,fileName);//文件對象
				try
				{
					ta.setText("");//每打開一個文件時,將文本區的內容清空
					//帶緩衝技術的讀取流
					BufferedReader br=new BufferedReader(new FileReader(file));
					String line=null;//讀一行
					while ((line=br.readLine())!=null)
					{
						//添加到文本區域
						ta.append(line+"\r\n");
					}
					br.close();//關流
				}
				catch (IOException ie)
				{
					throw new RuntimeException("文件打開失敗");
				}
			}
		});

		//保存事件
		saveMi.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				//如果是第一次保存,則顯示文件對話框
				if(file==null)//-------------
				{
					//顯示文件對話框
					saveDia.setVisible(true);//----------------------
					String dir=saveDia.getDirectory();
					String filename=saveDia.getFile();
					
					if(dir==null||filename==null)//--------------------
						return;

					file=new File(dir,filename);
					
				}
				save();//保存文件方法
			}
		});
		
		//另存爲事件
		otherSaveMi.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				//不管是不是第一次保存,都顯示文件對話框
				saveDia.setVisible(true);//----------------------
				String dir=saveDia.getDirectory();
				String filename=saveDia.getFile();

				if(dir==null||filename==null)//--------------------
					return;

				file=new File(dir,filename);

				save();//保存文件方法
				//保存時,默認文件對話框位置在打開文件的位置
				openDia.setFile(file.getName());
			}
		});

		//退出事件
		closeMi.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.exit(0);
			}
		});
	}
	
	//保存文件
	private void save()
	{			
		try
		{
			//帶緩衝區的寫入流
			BufferedWriter bw=new BufferedWriter(new FileWriter(file));
			//獲取文本區域中的內容
			String text=ta.getText();
			bw.write(text);//寫入文件中
			bw.close();//關流

		}
		catch (IOException ie)
		{
			throw new RuntimeException("文件保存失敗");
		}
	}

	public static void main(String[] args) 
	{
		//程序運行
		new MyMenuText();
	}
}


 

 

   ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章