Java開發筆記(一百一十七)AWT窗口

前面介紹的全部Java代碼,都只能經過日誌觀察運行狀況,就算編譯成class文件,也必須在命令行下面運行,這樣的程序無疑只能給開發者作調試用,不能拿給通常人使用。由於普通用戶早已習慣在窗口界面上操做,哪裏還會跑去命令行自討苦吃呢?因此Java代碼寫得再好,也得有個軟件界面與用戶交互,並將程序的處理結果顯示在界面上。衆所周知,移動開發的Android平臺,採用的即是Java語言,此時Java代碼的執行結果可直接顯示到手機屏幕。對於電腦來講,Java也提供了桌面程序的圖形開發工具,它們主要有三組工具包,分別是源於Java1的AWT、Java2引入的Swing、集成進Java8的JavaFX,每組工具包都自成體系,均能實現圖形界面的開發功能。
以最先的AWT爲例,它的全稱是「Abstract Window Toolkit」,意即抽象窗口工具包。AWT依賴於Java程序所在的操做系統,它的圖形函數與宿主系統的圖形函數是一一對應的,當Java程序經過AWT繪製圖形界面的時候,其實底層仍然調用了操做系統的圖形庫。固然,因爲各類操做系統的圖形庫不盡相同,某個系統提供的圖形函數可能在另外一個系統並不存在,所以爲了讓Java程序兼容不一樣的操做系統,AWT不得不犧牲部分功能以實現「一次編譯,處處運行」的願景。AWT當然砍掉了一些功能,反而使得它相對純粹,更適合初學者入門桌面程序開發。
好比要在Window上顯示一個窗口界面,利用AWT實現的話只需以下幾行代碼:html

import java.awt.Frame;

//演示一個最簡單的窗口
public class TestSimple {

	public static void main(String[] args) {
		Frame frame = new Frame(); // 建立一個窗口對象
		frame.setVisible(true); // 必須設置爲true,不然看不見
	}
}

運行以上的測試代碼,可在屏幕左上角找到以下圖所示的小窗口:java


顯然這個小窗口很是原始,只有一個Java圖標以及最小化、最大化、關閉三個按鈕,並且Java圖標與最小化按鈕還擠到一塊了。因而可知,這個原始窗口尚不具有正常軟件的基礎功能,包括但不限於下列幾點:
一、左上角的程序圖標右邊,應當顯示程序名稱;
二、除了窗口頂部的三個按鈕,還要擁有下方的一塊窗口主體界面;
三、窗口啓動後的初始位置位於屏幕中央比較合適,方便用戶迅速找到它;
上述的幾點功能也挺容易實現,只要調用Frame對象的對應方法便可,下面即是Frame類的經常使用方法說明:
setTitle:設置窗口標題。或者在Frame的構造方法中直接填寫標題文字也行。
setSize:設置窗口的寬度和高度。設置以後程序就有了指定寬高的窗口界面。
setLocationRelativeTo:設置窗口的相對位置。當傳入的參數值爲null時,窗口啓動後將顯示在屏幕中央。
setResizable:是否容許調整窗口大小。默認容許經過拖動邊界來改變窗口大小,該方法設置爲false則禁止調整窗口大小。
setBackground:設置窗口的背景色。窗口默認背景爲白色。
setVisible:是否容許窗口可見。窗口默認是看不到的,因此必須設置爲true才能看到窗口。
接着在代碼中補充這些方法調用,完善後的代碼例子以下所示:程序員

public class TestFrame {

	public static void main(String[] args) {
		final Frame frame = new Frame("測試窗口"); // 建立一個窗口對象
		frame.setSize(400, 200); // 必須設置寬高,不然沒有窗體
		//frame.setTitle("222"); // 設置窗口標題,不然窗口無標題
		frame.setLocationRelativeTo(null);// 將窗口居中。若無該方法,窗口將位於屏幕左上角
		//frame.setResizable(false); // 禁止調整窗口大小。默認容許調整窗口尺寸
		frame.setBackground(Color.GREEN); // 設置窗口背景色。默認白色
		frame.setVisible(true); // 必須設置爲true,不然看不見
	}
}

運行上面的完善代碼,發現屏幕中央彈出了一塊綠油油的程序界面:函數


哇哦,原來Java開發桌面程序也不難嘛,很容易就鼓搗出了一個有頭有臉的窗口。儘管這個窗口界面還很簡單,但它畢竟比命令行好看多了,你瞧,按住標題欄能夠拖動窗口,單擊最小化按鈕可讓它縮小至任務欄,單擊最大化按鈕可讓它擴大到整個屏幕,單擊叉號按鈕能夠……。等等,點了叉號按鈕竟然沒有關閉窗口,這是怎麼回事?不該該呀,正常單擊叉號按鈕都會自動關閉窗口,難道是系統抽風了?AWT之因此沒在單擊叉號後自動關窗,是由於考慮到此時可能須要額外處理某些事務,例如如下幾點場景:
一、要不要彈出舒適提示,避免用戶不當心點了叉號?
二、關窗至關於強行殺死程序,那麼在程序結束以前,是否先釋放佔用的資源?
三、單擊叉號難道必須叫程序退出運行嗎?像360系列軟件,單擊它的叉號,結果躲到了Window右下角的任務欄小圖標,其實並未退出運行,就跟單擊了最小化按鈕同樣。
如此琢磨起來,既然單擊叉號還有這麼多學問,就得由程序員去接管叉號的單擊事件了,AWT只負責監聽叉號按鈕的單擊動做,至於單擊以後該讓程序作何操做,全憑開發者自由發揮。具體到代碼實現,則需調用窗口對象的addWindowListener方法,給該窗口添加事件監聽器,一旦接收到窗口關閉動做,就觸發監聽器的windowClosing方法。那麼自定義的關窗代碼,便可填入此處的windowClosing方法,下面是點擊叉號便自行關窗的補充代碼:工具

		frame.addWindowListener(new WindowAdapter() { // 爲窗口註冊監聽器,實現窗口關閉功能
			public void windowClosing(WindowEvent e) { // 點擊了窗口右上角的叉號按鈕
				frame.dispose(); // 關閉窗口
			}
		});

  

更多Java技術文章參見《Java開發筆記(序)章節目錄開發工具

相關文章
相關標籤/搜索