前面介紹了AWT界面編程的若干技術,在編碼實踐的時候,會發現AWT用起來甚是彆扭,它的毛病包括但不限於下列幾點:
一、對中文的支持很差,要想在界面上正常顯示漢字,還得在運行時指定額外的運行參數「-Dfile.encoding=gbk」;
二、Label標籤控件竟然沒法分行展現文本,連換行這麼基本的功能都不支持,真是讓人醉了;
三、AWT沒提供專門顯示圖像的控件,只能由程序員本身定義單獨的圖像視圖,繁瑣的操做立馬嚇跑一票人;
考慮到AWT屬於Java1時代的產物,種種不足之處尚且情有可原。但是AWT拿來開發桌面程序的效果實在糟糕,爲此Java2又推出了AWT的升級版——Swing工具包。Swing工具一方面改進了桌面開發的編碼細節,另外一方面完善了系統平臺的兼容性,這是由於其內部改成使用Java實現,因此採用Swing編寫的程序能夠跨平臺運行,而不像AWT那樣依賴於宿主系統的圖形函數。
因爲Swing與AWT同屬Java家族,爲了讓開發者在AWT與Swing之間方便銜接,所以Swing控件的用法相似於對應的AWT控件,不論是控件名稱仍是控件方法,總能找到你所熟悉的味道。以窗口框架爲例,AWT的框架名叫Frame,Swing的框架名叫JFrame,僅僅在開頭加了個J。兩個框架的方法調用也差很少,主要的區別主要有如下兩點:
一、單擊窗口右上角的叉號按鈕,單擊它理應關閉窗口,假若使用AWT的Frame類實現默認關閉功能,則需爲窗口註冊監聽器,很簡單的功能也得須要以下好幾行代碼:html
frame.addWindowListener(new WindowAdapter() { // 爲窗口註冊監聽器,實現窗口關閉功能 public void windowClosing(WindowEvent e) { // 點擊了窗口右上角的叉號按鈕 frame.dispose(); // 關閉窗口 } });
使用Swing的JFrame類實現一樣功能的話,換成新增的setDefaultCloseOperation方法,只要以下一行代碼就搞定了:程序員
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 設置默認的關閉操做:退出程序
二、JFrame的setBackground方法不起做用,只能在面板JPanel那裏設置背景。這個JPanel正是對應AWT的Panel面板類,兩者的用法沒什麼太大差異,同樣佔據窗口的主體區域,同樣在上面添加各種控件。JPanel惟一可以出彩的地方,即是調用setBackground方法給窗體設置背景了,背景設置的調用代碼示例以下:編程
JPanel panel = new JPanel(); // 建立一個面板 panel.setBackground(Color.GREEN); // 設置面板的背景 frame.add(panel); // 在窗口上添加面板
此外按鈕控件也有較大的完善,Swing中的按鈕控件名叫JButton,它與AWT的Button比起來,改進之處主要有下列三點:框架
一、AWT默認的按鈕外觀是徹底的灰色,毫無層次感。而JButton默認的外觀是帶立體效果的圖標,井井有條更有摩登範兒。
二、AWT的許多控件在設置文本之時,有的調用setLabel方法,有的調用setText方法,各叫各的並不統一。而Swing從JButton開始,全部的控件文本設置方法都改成統一的setText方法,原先的setLabel方法已被註解標記爲已廢棄。
三、最重要的一點,Swing解決了中文的字符編碼問題,即便代碼文件採起UTF-8編碼,運行Swing程序也無需額外的運行參數去設置文件的字符編碼,窗口界面上的中文始終正常顯示,不會出現AWT因未指定字符編碼而產生的亂碼問題。
除了上面的幾點,JButton的用法相似Button,不少方法都能直接拿來調用,譬以下面的代碼例子演示了某個按鈕的單擊事件處理過程:ide
JButton button = new JButton("點我"); // JButton無需另外設置文件的字符編碼 button.setPreferredSize(new Dimension(200, 30)); // 設置按鈕的推薦寬高 button.addActionListener(new ActionListener() { // 給按鈕註冊一個點擊監聽器 @Override public void actionPerformed(ActionEvent e) { // 發生了單擊事件 button.setText(getNowTime() + " 點擊了按鈕"); // 設置按鈕的文本 } }); button.setFont(new Font("中號", Font.PLAIN, 16)); // 設置按鈕文字的字體與大小 panel.add(button); // 在面板上添加按鈕
運行以上的演示代碼,彈出Swing的程序窗口,按鈕單擊先後的界面分別以下面兩圖所示,從中可見JButton的廬山真面目。函數
更多Java技術文章參見《Java開發筆記(序)章節目錄》工具