摘要: Linux系統(tǒng)在近幾年發(fā)展神速,但是由于其GUI應用程序開發(fā)方法及其標準不統(tǒng)一導致開發(fā)效率低,界面不友好。而Java語言是一種極具潛力的多平臺應用軟件開發(fā)工具,在Linux平臺上用Java開發(fā)GUI應用的技術目前國內仍極少使用。本文將對該方法的細節(jié)、特點及其意義作詳細論述。 關鍵詞: Linux、開放源代碼、GUI、Java、組件、容器、布局管理器
1、為什么要用Java開發(fā)Linux GUI應用 1.1 Linux GUI應用開發(fā)現(xiàn)狀 目前Linux操作系統(tǒng)在市場上呈現(xiàn)一種"叫好不叫座"的局面,在一定的程度上與在其上運行的好用的應用程序數(shù)量太少有著的密切的關系。盡管能在Linux上運行的應用程序已經(jīng)很多,但大多數(shù)都較難安裝與使用,而且很多不是很穩(wěn)定。 要改善Linux應用程序的易用性,大量采用GUI(圖形用戶界面)是一個必然的趨勢。但是目前Linux平臺GUI應用程序的開發(fā)仍然不太容易。盡管有不少的開放源碼開發(fā)工具在極力增強其GUI應用程序開發(fā)能力,但是由于標準不統(tǒng)一、資料太少等原因很難推廣。Kylix等商業(yè)開發(fā)工具盡管具有大公司的技術實力支撐,但由于價格等因素也難以很快推廣。這種局面不盡快打破,Linux的應用就不可能得到很快的普及。 綜上所述,目前Linux應用軟件開發(fā)領域急需一種容易學習、成本低、效率高的GUI應用程序開發(fā)方法。 1.2 Java的特點 自1995年Sun Microsystem推出Java語言以來,Java語言與Java技術均得到了飛速的發(fā)展。因其強大的網(wǎng)絡功能、良好的跨平臺特性、較高的開發(fā)效率成為國內外軟件開發(fā)領域的一種強大工具。 目前Java程序已經(jīng)能運行在從Windows系列、Unix系列、Mac OS系列到Linux等幾乎所有操作系統(tǒng)平臺上,而且特別重要的是它已經(jīng)能做到"一次編寫,到處運行";另一方面,與C++等傳統(tǒng)程序設計語言相比,用Java來開發(fā)GUI應用程序的難度已經(jīng)大大降低;加上Java語言所具有的純面向對象、網(wǎng)絡功能強大等特性,使得Java非常適于用來編制應用軟件。 1.3 用Java開發(fā)Linux GUI應用的優(yōu)點 正由于Java語言的特點以及Linux操作系統(tǒng)的發(fā)展現(xiàn)狀,使得用Java語言來開發(fā)Linux平臺GUI應用程序成為了一種很好的方法。 一方面,用Java語言在Linux平臺上開發(fā)GUI應用程序對于習慣了在Windows平臺上用Java編程的程序員來說無須改變編程習慣。因為Java有良好的跨平臺特性,在Linux下編程與在Windows下編程沒什么兩樣,如果用純Java編程,則程序中使用的類、屬性、方法等等都不用改變,甚至還可以在Windows下編輯、編譯好Java程序再直接移植到Linux下執(zhí)行。 另一方面,由于在Linux平臺上存在大量的優(yōu)秀的開放源代碼軟件開發(fā)工具,包括用于Java程序開發(fā)的如NetBeans等工具,這樣如果在Linux平臺上用這些開放源代碼軟件開發(fā)工具進行Java軟件開發(fā),其所需的成本可以比在Windows下進行開發(fā)低得多。當然在Linux下也存在像Borland Jbuilder、IBM Visual Age等商業(yè)Java軟件開發(fā)工具,它們都具有強大的功能、完備的文檔,更有利于在Linux上進行Java軟件開發(fā)。 2、用Java開發(fā)Linux GUI應用的基本方法 2.1 開發(fā)環(huán)境的安裝與配置 *JDK的安裝 要Linux平臺上開發(fā)Java應用,最基本的方式需要下載一個JDK,這是由Sun公司免費提供的一個Java軟件開發(fā)包。下載得到的文件一般形如j2sdk1.3-linux.rpm.bin,首先將其拷貝到合適的目錄(如/usr/src或/usr/local等)下,執(zhí)行./j2sdk1.3-linux.rpm.bin,會產生一個j2sdk1.3-linux.rpm文件,這是一個典型的RPM軟件包,再用RPM軟件包管理工具就可直接安裝JDK,在安裝過程中會提示許可信息,同意其協(xié)議就可很順利地安裝了。 *路徑的配置 為了做到在任意路徑下均可直接執(zhí)行Java編程相關命令,需要修改/etc/profile文件,在其中設置路徑。具體方法是在其中加入這樣一行: PATH="$PATH/usr/jdk1.3" 這里/usr/jdk1.3是JDK的安裝路徑。 2.2 基本開發(fā)過程 ①編輯源程序 在Linux下有很多優(yōu)秀的程序編輯器軟件,例如在控制臺下有著名的Emacs、vi、jed等,在X window下有Xemacs、gedit、kedit等,這些軟件通常都有語法著色、自動縮進等非常適合于程序編輯的功能。要在Linux系統(tǒng)下開發(fā)Java程序,首先需要用這些編輯器編輯Java源程序。至于具體用哪種編輯器要依個人的喜好而定,反正可用的軟件很多。 ②編譯源程序 正確的編輯好Java源程序后,需要對其進行編譯,以生成字節(jié)碼文件。假定源程序文件名為Test.java,則可用如下形式: javac Test.java ③調試運行程序 執(zhí)行守編譯命令后,對于源程序中的每一個類,系統(tǒng)將產生一個字節(jié)碼文件,文件名為對應的類名,而其擴展名為class。一般地,每一個Java程序中應該有一個主類,該類是整個程序的入口。開發(fā)Java程序的下一步就是調試運行,仍以上面提到的情況為例,運行該Java程序的方法為: java Test 事實上解釋器將解釋執(zhí)行Test.class文件并按其中的調用解釋執(zhí)行其它字節(jié)碼文件。 2.3 基本開發(fā)方法 其實無論在什么平臺下,GUI應用程序的基本開發(fā)方法都是相似的。一般都包括下面這樣四個步驟: ①創(chuàng)建容器 首先要創(chuàng)建一個GUI應用程序,需要創(chuàng)建一個用于容納所有其它GUI組件元素的載體,Java中稱為容器。典型的包括窗口(Window)、框架(Frame/JFrame)、對話框(Dialog/JDialog)、面板(Panel/JPanel)等。只有先創(chuàng)建了這些容器,其它界面元素如按鈕(Button/JButton)、標簽(Label/JLabel)、文本框(TextField/JTextField)等才有地方放。 ②添加組件 為了實現(xiàn)GUI應用程序的功能,為了與用戶交換,需要在容器上添加各種組件/控件。這需要根據(jù)具體的功能要求來決定用什么組件。例如,如果需要提示信息,可用標簽(Label/JLabel);如果需要輸入少量文本,可用文本框(TextField/JTextField);如果需要輸入較多文本,可用文本區(qū)域(TextArea/JTextArea);如果需要輸入密碼,可用密碼域(JPasswordField)等等。 ③安排組件 與傳統(tǒng)的Windows環(huán)境下的GUI軟件開發(fā)工具不同,為了更好地實現(xiàn)跨平臺,Java程序中各組件的位置、大小一般不是以絕對量來衡量,而是以相對量來衡量。例如有時候,程序的組件的位置是按"東/East"、"西/West"、"南/South"、"北/North"、"中/Center"這種方位來標識的。因此,在組織界面時,除了要考慮所需的組件種類外,還需要考慮如何安排這些組件的位置與大小。這一般是通過設置布局管理器(Layout Manager)及其相關屬性來實現(xiàn)的。事實上上述按方位來安排組件就是采用了Java中多種布局管理器里的BorderLayout布局管理器。 ④處理事件 為了完成一個GUI應用程序所應具備的功能,除了適當?shù)匕才鸥鞣N組件產生美觀的界面外,還需要處理各種界面元素事件,以便真正實現(xiàn)與用戶的交換,完成程序的功能。在Java程序中這一般是通過實現(xiàn)適當?shù)氖录O(jiān)聽者接口來完成的。比如如果需要響應按鈕事件,就需要實現(xiàn)ActionListener監(jiān)聽者接口;如果需要響應窗口事件,就需要實現(xiàn)WindowListener監(jiān)聽者接口。 3、開發(fā)實例 下面是一個在Linux下用Java開發(fā)GUI應用程序的實例。該程序的主要功能是提供一個用于輸入用戶名與密碼以登錄到某一系統(tǒng)的界面,如果用戶輸入相關信息后單擊"登錄"按鈕,系統(tǒng)將在窗口的下半部分顯示所輸入的用戶名與密碼信息,如果單擊"退出"按鈕,程序將停止運行。如下圖1所示:
本程序沒有提供很強的功能,目的只在于介紹在Linux上用Java編寫GUI應用程序的基本方法。以下是程序的源代碼,其中的注釋說明了GUI應用具體的創(chuàng)建步驟:
//以下三行用于引入添加組件、設置布局管理器及處理事件所需的軟件包 import java.awt.*; import java.awt.event.*; import javax.swing.*; //下行說明主類派生自JFrame/框架類,要實現(xiàn)ActionListener接口以處理動作事件 class LoginFrame extends JFrame implements ActionListener { //以下四行用于聲明要加到框架窗口中的所有組件 JLabel UserLabel,PasswordLabel,UserResult,PasswordResult; JTextField User; JPasswordField Password; JButton LoginButton,ExitButton; public LoginFrame() { super("登錄");//調用父類構造方法,設置窗口標題 setSize(300,200);//設置窗口大小 getContentPane().setLayout(new GridLayout(5,2,10,10));//設置布局管理器,將窗口分成5行2列,行、列間保留10個像素的空白 //以下8行具體創(chuàng)建組件實例 UserLabel=new JLabel("用戶名稱:"); PasswordLabel=new JLabel("用戶密碼:"); UserResult=new JLabel(" "); PasswordResult=new JLabel(" "); User=new JTextField(10); Password=new JPasswordField(10); LoginButton=new JButton("登錄"); ExitButton=new JButton("退出"); //以下兩行設置用于保存結果的標簽的前景色屬性 UserResult.setForeground(Color.blue); PasswordResult.setForeground(Color.blue); //以下兩行為"登錄"按鈕與"退出"按鈕注冊監(jiān)聽者 LoginButton.addActionListener(this); ExitButton.addActionListener(this); //以下八行將所有組件加入到框架窗口中 getContentPane().add(UserLabel); getContentPane().add(User); getContentPane().add(PasswordLabel); getContentPane().add(Password); getContentPane().add(LoginButton); getContentPane().add(ExitButton); getContentPane().add(UserResult); getContentPane().add(PasswordResult); //以下一行用于窗口事件監(jiān)聽者注冊 addWindowListener(new WindowManager()); setVisible(true);//使框架窗口變?yōu)榭梢?br>} //以下函數(shù)用于處理按鈕動作事件 public void actionPerformed(ActionEvent evt) { if(evt.getSource()==LoginButton)//表明按下了"登錄"按鈕 { UserResult.setText("用戶名稱:"+User.getText()); PasswordResult.setText("用戶密碼:"+Password.getPassword()); } else if(evt.getSource()==ExitButton)//表明按下了"退出"按鈕 { dispose(); System.exit(0); } } //以下為系統(tǒng)主函數(shù),是程序的入口 public static void main(String args[]) { LoginFrame mainFrame = new LoginFrame();//創(chuàng)建框架窗口實例 } } class WindowManager extends WindowAdapter//窗口事件監(jiān)聽者類 { public void windowClosing(WindowEvent evt)//本方法用于窗口關閉事件 { JFrame frame=(JFrame)(evt.getSource()); frame.dispose(); System.exit(0); } } 4、總結 用Java語言來開發(fā)Linux平臺的圖形用戶界面應用程序,容易理解、容易學習、環(huán)境要求低、開發(fā)效率高,而且開發(fā)出來的應用程序可移植性好,可以直接移植到其它平臺上運行而不會發(fā)生多大變化。這對于快速開發(fā)Linux GUI應用軟件,豐富Linux平臺應用軟件的種類,增強Linux應用軟件功能,從而更好地普及Linux系統(tǒng)的應用都有巨大的推動作用。 [參考文獻] 《21天學通Java2》 [M] Laura Lemay、 Rogers Cadenhead著,瀟湘工作室譯,人民郵電出版社2001年5月出版
|