生成Netbeans 6.5 GUI應用程序簡介
我們將完成Netbeans 6.5 GUI 布局和設計工作并添加幾個按鈕和文本字段。這些文本字段用于接收用戶輸入和顯示程序輸出。這些按鈕用于啟動前端的內(nèi)置功能。我們創(chuàng)建的應用程序是一個非常簡單但功能完善的計算器。
有關(guān)更全面的Netbeans 6.5 GUI 生成器設計功能指南(包括各種設計功能的視頻演示),請參見在Netbeans 6.5IDE 中設計 Swing GUI。
要學完本教程,您需要具備以下軟件和資源。
軟件或資源 | 要求的版本 |
---|---|
NetBeans IDE | 版本 6.5 |
Java Development Kit (JDK) | 版本 6 或 版本 5 |
第一步是為要開發(fā)的應用程序創(chuàng)建 IDE 項目。我們將項目命名為 NumberAddition。
- 選擇“文件”>“新建項目”。或者,也可以單擊 IDE 工具欄中的“新建項目”圖標。
- 在“類別”窗格中,選擇 "Java" 節(jié)點。在“項目”窗格中,選擇“Java 應用程序”。單擊“下一步”。
- 在“項目名稱”字段中鍵入
NumberAddition
,然后指定項目位置路徑(例如,在主目錄中)。 - (可選)選中“使用專用文件夾存儲庫”復選框,并指定庫文件夾的位置。有關(guān)此選項的詳細信息,請參見共享項目庫。
- 確?!霸O置為主項目”復選框處于選中狀態(tài)。
- 如果已選中“創(chuàng)建主類”復選框,請取消選中該復選框。
- 單擊“完成”。
要繼續(xù)生成界面,我們需要創(chuàng)建一個 Java 容器,以便放置所需的其他 GUI 組件。在此步驟中,我們將使用 JFrame
組件創(chuàng)建一個容器。我們將該容器放在新包中,該包將顯示在“源包”節(jié)點中。
創(chuàng)建 JFrame 容器
- 在“項目”窗口中,右鍵單擊 "NumberAddition" 節(jié)點并選擇“新建”>“JFrame 窗體”。
- 在“類名”中輸入 NumberAdditionUI。
- 在“包”中輸入
my.numberaddition
。 - 單擊“完成”。
IDE 將在 NumberAddition
應用程序中創(chuàng)建 NumberAdditionUI
窗體和 NumberAdditionUI
類,然后在 GUI 生成器中打開 NumberAdditionUI
窗體。my.NumberAddition
包將替代缺省包。
接下來,我們將通過組件面板使用 JPanel 填充應用程序前端。然后,添加三個 JLabel、三個 JTextField 和三個 JButton。如果以前沒有用過 GUI 生成器,您可能會發(fā)現(xiàn)在 NetBeans IDE 中設計 Swing GUI 教程中有關(guān)組件放置的信息非常有用。
在拖動并放置完上述組件后,JFrame 應類似于以下屏幕快照。
如果在 IDE 右上角未看到“組件面板”窗口,則選擇“窗口”>“組件面板”。
- 先從組件面板中選擇一個 JPanel,然后將其拖放到 JFrame 上。
- 在突出顯示該 JPanel 時,轉(zhuǎn)至“屬性”窗口,然后單擊 "Border" 旁邊的省略號 (...) 按鈕以選擇邊框樣式。
- 在 "Border" 對話框中,從列表中選擇“帶標題的邊框”,然后在“標題”字段中鍵入
Number Addition
。單擊“確定”保存更改并退出該對話框。 - 現(xiàn)在,將會看到一個標題為 Number Addition 的空 JFrame,它與屏幕快照類似。按照上面的屏幕快照所示,添加三個 JLabel、三個 JTextField 和三個 JButton。
在該步驟中,我們將重命名剛添加到 JFrame 中的這些組件的顯示文本。
- 雙擊
jLabel1
并將文本屬性更改為First Number
。 - 雙擊
jLabel2
并將文本更改為Second Number
。 - 雙擊
jLabel3
并將文本更改為Result
。 - 刪除
jTextField1
中的樣例文本??赏ㄟ^以下方法使顯示文本處于可編輯狀態(tài):單擊文本字段,稍等片刻,然后再次單擊文本字段??赡苄枰獙?jTextField1
調(diào)整為原始大小。對于jTextField2
和jTextField3
,重復此步驟。 - 將
jButton1
顯示文本重命名為Clear
。(可以通過右鍵單擊按鈕并選擇“編輯文本”來編輯按鈕的文本。或者,也可以單擊按鈕,稍等片刻,然后再次單擊按鈕。) - 將
jButton2
顯示文本重命名為Add
。 - 將
jButton3
顯示文本重命名為Exit
。
現(xiàn)在,完成的 GUI 應類似于以下屏幕快照:
在本練習中,我們將為 "Add"、"Clear" 和 "Exit" 按鈕添加功能。jTextField1
和 jTextField2
框用于用戶輸入,jTextField3
用于程序輸出;我們要創(chuàng)建的應用程序是一個非常簡單的計算器。我們現(xiàn)在就開始吧。
要為這些按鈕添加功能,必須為每個按鈕指定事件處理程序以響應事件。在本示例中,我們需要了解何時通過鼠標單擊或鍵盤按下了按鈕。因此,我們使用 ActionListener 來響應 ActionEvent。
- 右鍵單擊 "Exit" 按鈕。從彈出式菜單中選擇“事件”> "Action" > "ActionPerformed"。請注意,該菜單中還包含很多其他可響應的事件!在選擇 actionPerformed 事件時,IDE 自動在 "Exit" 按鈕中添加 ActionListener,并生成一種處理程序方法以處理偵聽程序的 actionPerformed 方法。
- IDE 將打開“源代碼”窗口并滾動至某一位置,在此將實現(xiàn)按下按鈕(通過鼠標單擊或鍵盤)時希望其執(zhí)行的操作。源代碼窗口應包含以下行:
- private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
- //TODO: Add your handling code here:
- }
- 現(xiàn)在,我們將為希望 "Exit" 按鈕執(zhí)行的操作添加代碼。必須在以上代碼中鍵入 System.exit(0); 以替換 TODO 行。完成的 "Exit" 按鈕代碼應如下所示:
使 "Clear" 按鈕正常工作- private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
- System.exit(0);
- }
- 單擊工作區(qū)域頂部的“設計”標簽以返回到窗體設計區(qū)域
- 右鍵單擊 "Clear" 按鈕 (
jButton1
)。從彈出式菜單中選擇“事件”> "Action" > "actionPerformed"。 - "Clear" 按鈕用于刪除 jTextField 中的所有文本。為此,將添加一些與以上代碼類似的代碼。完成的源代碼應如下所示:
- private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
- jTextField1.setText("");
- jTextField2.setText("");
- jTextField3.setText("");
- }
上面的代碼將所有三個 JTextField 中的文本更改為空,實際就是使用空白覆蓋現(xiàn)有文本。
使 "Add" 按鈕正常工作"Add" 按鈕用于執(zhí)行三個操作:
- 它接受
jTextField1
和jTextField2
中的用戶輸入,并將輸入類型由字符串轉(zhuǎn)換為浮點。 - 然后,它將兩個數(shù)相加;最后,
- 將兩個數(shù)之和的類型轉(zhuǎn)換為字符串,并將其放在
TextField3
中。
- 單擊工作區(qū)域頂部的“設計”標簽以返回到窗體設計區(qū)域。
- 右鍵單擊 "Add" 按鈕 (
jButton2
)。從彈出式菜單中選擇“事件”> "Action" > "actionPerformed" - 我們將添加一些代碼以使 "Add" 按鈕正常工作。完成的源代碼應如下所示:
- private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
- // First we define float variables.
- float num1, num2, result;
- // We have to parse the text to a type float.
- num1 = Float.parseFloat(jTextField1.getText());
- num2 = Float.parseFloat(jTextField2.getText());
- // Now we can perform the addition.
- result = num1+num2;
- // We will now pass the value of result to jTextField3.
- // At the same time, we are going to
- // change the value of result from a float to a string.
- jTextField3.setText(String.valueOf(result)); }
程序已創(chuàng)建完畢,我們現(xiàn)在可以生成并運行該程序以查看其運行情況。
在 IDE 中運行程序:
- 選擇“運行”>“運行主項目”。
- 如果顯示的窗口通知您項目 NumberAddition 沒有設置主類,則應在同一窗口中選擇 "my.NumberAddition.NumberAdditionUI" 作為主類,然后單擊“確定”按鈕。
在 IDE 外部運行程序:
- 選擇“運行”>“清理并生成主項目”(Shift-F11) 以生成應用程序 JAR 文件。
- 通過使用系統(tǒng)的文件資源管理器或文件管理器,導航至
NumberAddition/dist
目錄。 - 雙擊
NumberAddition.jar
文件。
幾秒鐘后,將會啟動應用程序。
注意:如果在雙擊 JAR 文件時沒有啟動應用程序,請參見本文以了解在操作系統(tǒng)中設置 JAR 文件關(guān)聯(lián)的相關(guān)信息。
也可以通過命令行啟動應用程序。
通過命令行啟動應用程序:
- 在系統(tǒng)上,打開命令提示符或終端窗口。
- 在命令提示符中,轉(zhuǎn)至
NumberAddition/dist
目錄。 - 在命令行中,鍵入以下語句:
- java -jar NumberAddition.jar
本教程已介紹了如何響應簡單的按鈕事件。還可以讓應用程序響應很多其他事件。IDE 可以幫助您查找 GUI 組件可處理的可用事件列表:
- 返回至編輯器中的
NumberAdditionUI.java
文件。單擊“設計”標簽以在 GUI 生成器中查看 GUI 布局。 - 右鍵單擊任何 GUI 組件,然后從彈出式菜單中選擇“事件”。目前,僅瀏覽菜單以查看其中的內(nèi)容,而無需選擇任何內(nèi)容。
- 或者,也可以從“窗口”菜單中選擇“屬性”。在“屬性”窗口中,單擊“事件”標簽。在“事件”標簽中,可以查看和編輯與當前活動 GUI 組件關(guān)聯(lián)的事件處理程序。
- 可以讓應用程序響應按鍵、鼠標單擊、雙擊和三擊、鼠標移動、窗口大小以及焦點變化。可以從“事件”菜單中為所有這些內(nèi)容生成事件處理程序。最常用的事件是 Action 事件。(要了解事件處理的最佳做法,請參見 Sun 的 Java 事件教程。)
事件處理是如何工作的呢?每次從“事件”菜單中選擇事件時,IDE 都會自動創(chuàng)建一個所謂的事件偵聽程序,并將其與組件關(guān)聯(lián)。請完成以下步驟以查看事件處理的工作方式。
- 返回至編輯器中的
NumberAdditionUI.java
文件。單擊“源”標簽以查看 GUI 源代碼。 - 向下滾動并注意剛實現(xiàn)的方法
jButton1ActionPerformed()
、jButton2ActionPerformed()
和jButton3ActionPerformed()
。這些方法稱為事件處理程序。 - 現(xiàn)在,滾動至名為
initComponents()
的方法。如果未看到該方法,請查找顯示Generated Code
的行;單擊該行旁邊的 + 號以展開折疊的initComponents()
方法。 - 首先,請注意
initComponents()
方法周圍的藍色塊。此代碼是由 IDE 自動生成的,無法對其進行編輯。 - 現(xiàn)在,瀏覽
initComponents()
方法。此外,該方法還包含用于初始化 GUI 組件并將其放置在窗體上的代碼。在“設計”視圖中放置和編輯組件時,將會自動生成和更新該代碼。 - 在
initComponents()
中,向下滾動至顯示以下內(nèi)容的位置:- jButton3.setText("Exit");
- jButton3.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- jButton3ActionPerformed(evt);
- }
- });
這是在 GUI 組件中添加事件偵聽程序?qū)ο蟮奈恢茫辉诒臼纠校瑢⒃?
jButton3
中注冊 ActionListener。ActionListener 接口具有一個 actionPerformed 方法,該方法采用 ActionEvent 對象(只需調(diào)用jButton3ActionPerformed
事件處理程序即可實現(xiàn))作為其參數(shù)?,F(xiàn)在,該按鈕將偵聽 action 事件。每次按下該按鈕時,都會生成 ActionEvent 并將其傳遞給偵聽程序的 actionPerformed 方法,而該方法又會執(zhí)行在該事件的事件處理程序中提供的代碼。
一般來說,要能夠進行響應,每個交互式 GUI 組件需要在事件偵聽程序中進行注冊,并且需要實現(xiàn)事件處理程序。正如您所看到的一樣,NetBeans IDE 可處理關(guān)聯(lián)事件偵聽程序的工作,因此,您可以集中精力實現(xiàn)應由事件觸發(fā)的實際業(yè)務邏輯。
【編輯推薦】