本教程指導您如何將名為 ContactEditor 的應用程序的 GUI 連接到 Derby 數據庫。在此過程中,您將向 GUI 添加數據敏感的 JDBC 組件,使該程序能夠與雇員數據庫交互。
在本教程中,您將學會如何:
- 使用 GUI Builder 界面
- 連接兩個 GUI 窗口
- 添加和編輯 JDBCRowSet
- 添加數據模型
- 將 GUI 連接到 Derby 數據庫
- 將數據綁定到 UI 組件
- 將 UI 組件連接到應用程序邏輯
請注意本教程引用了名為 GUI DB Exercise Initial 的項目作為樣例,供您在使用這些步驟時參考。另請注意,歸檔文件中的 GUI DB Exercise Final 項目顯示了完成的應用程序。
入門
在 GUI Builder Quickstart 教程中,我們致力于為 ContactEditorUI.java 應用程序構建名為 ContactEditorUI 的對話框。在本教程中,我們將以前創建的 ContactEditorUI GUI 窗體和該應用程序 UI 的主(父)窗口都連接到 Derby 數據庫。請注意,盡管本教程中的圖片說明的是 Macintosh OS-X 上的過程,但在其他支持平臺(如 Windows 或 Solaris)上,步驟幾乎相同。
要成功完成本教程,您必須已經安裝并正在運行 IDE 包含的 Derby 數據庫服務器。請注意,到 NetBeans IDE 5.5 Beta 版時,包含的數據庫就不再叫作 Derby 了,而是被稱為 Java DB。您還需要將包含在樣例項目中的必要的支持類(在 Project 窗口中可見)編譯進項目。有關安裝和配置 Derby 以用于 NetBeans 的更多信息,請參見 NetBeans Derby tutorial。
最后,您還必須已經創建了 contact_database 并將 User Name 和 Password 設置為 nbuser。還要向數據庫添加必要的字段,添加的方法是使用 Create Table UI 或執行以下 SQL 語句:
CREATE TABLE "CONTACTS"
(
"ID" INTEGER not null primary key,
"FIRST_NAME" VARCHAR(50),
"LAST_NAME" VARCHAR(50),
"TITLE" VARCHAR(50),
"NICKNAME" VARCHAR(50),
"DISPLAY_FORMAT" SMALLINT,
"MAIL_FORMAT" SMALLINT,
"EMAIL_ADDRESSES" VARCHAR(1000)
)
請注意,如果您使用 SQL 命令而不是 Create Table UI 創建表,要看到 Contacts 表,您需要在 Runtime 窗口刷新 Tables 節點。
注意:要成功完成本教程,您必須在 JDK 5 上運行 NetBeans IDE 5.0。
添加數據模型
因為應用程序主窗口 GUI 已經準備妥當,我們可以直接跳到添加數據敏感組件這一步,它使我們能夠與數據庫中的數據交互。在本部分,我們將添加數據模型以確保數據在正確的窗體中向 UI 顯示。
添加 JDBCRowSet
因為我們需要的 JDBCRowSet 已經包含在 GUI DB 示例項目中,我們只需將它添加到應用程序 GUI 中即可。而包含的 RowSets 已經有了 BeanInfos,所以我們可以像使用 IDE 中的其他組件一樣使用它們,在 Properties 窗口中顯示它們的屬性。因為只打算使用這個類一次,所以不需要為了將它添加到窗體而將 JDBCRowSet 安裝到 Palette。但是如果想重復使用某個類,這樣做就很有價值了,我們為了節省時間和精力只是復制粘貼它。[SPAN]
添加 JDBCRowSet 到窗體:
- 在 Projects 窗口中,右鍵單擊 JDBCRowSet.java 節點并從彈出菜單中選擇 Copy。
- 將它粘貼到設計區域的任意位置。
IDE 將 JDBCRowSet 添加到窗體并且表示行設置的節點出現在 Inspector 窗口中。
請注意,Inspector 窗口中的節點是在 Other Components 節點內添加的。如果在試圖粘貼行設置時收到錯誤消息,則編譯項目,然后再試。
設置 JDBCRowSet 的屬性
現在需要編輯 JDBCRowSet 屬性,這樣它就能引用我們先前創建的 Contacts 數據庫了。還需要設置驅動程序及其使用的路徑并提供它進行連接時需要的密碼和用戶名。
編輯 JDBCRowSet 的屬性:
- 在 Inspector 窗口(不是 Projects 窗口)中選擇 JDBCRowSet1 節點。
- 在 Properties 窗口中,為命令屬性輸入 select * from contacts。
- 為驅動程序屬性輸入 org.apache.derby.jdbc.ClientDriver。
- 為 url 屬性輸入 jdbc:derby://localhost:1527/contact_database。
- 為密碼屬性輸入 nbuser。
- 為用戶名屬性輸入 nbuser。
添加數據模型
現在我們需要添加數據模型,它將成為應用程序與數據庫之間的一層,并封裝數據訪問,為訪問和修改數據提供邏輯。示例項目中再次提供了必要的 ContactsModel 類,所以我們只需將它添加到應用程序。包含這樣一個類可以在不迫使 GUI 發生變化的情況下更改數據模型。
向窗體添加數據模型:
- 在 Projects 窗口中,右鍵單擊 ContactsModel.java 節點并從彈出菜單中選擇 Copy。
- 將它粘貼到設計區域的任意位置。
IDE 將 ContactModel 添加到窗體并且表示行設置的節點出現在 Inspector 窗口中的 Other Components 節點內。
改變數據模型的變量名:
- 在 Inspector 窗口中,右鍵單擊 contactsModel1 節點并從彈出菜單中選擇 Change Variable Name。
- 在顯示的 Rename 對話框中,輸入新變量名 contactsModel 并單擊 OK。
設置數據模型的 rowSet 屬性:
- 在 Inspector 窗口中,選擇 contactsModel 節點。
- 在 Properties 窗口中,單擊 rowSet 屬性的省略號按鈕 (...)。
- 在顯示的編輯器中,選擇 Get Parameter From 窗格中的 Bean 單選按鈕。
- 從 Select Bean 組合框中,選擇 jDBCRowSet1。
- 單擊 OK 退出對話框。
IDE 設置窗體的 contactsModel 數據模型以使用 jDBCRowSet。[SPAN]
將數據庫綁定到 UI
為了讓 GUI 與存儲在數據庫中的聯系人信息交互,需要將數據綁定到組件,這樣才能顯示這些數據并允許用戶與它進行交互。在本部分,我們開始將 GUI 連接到 JDBC 組件,啟用與數據庫的交互。
設置 JTable RowSet 模型
為了使 GUI 的 JTable 能夠正確顯示聯系人數據,我們需要設置它以使用提供的 RowSetTableModel 類。還需要將 RowSetTableModel 指向先前添加的 JDBCRowSet,使它能夠向 JTable 自身轉發列信息和數據。最后,我們將編輯 rowSetTableModel1 實例,僅讓那些我們想顯示的列在 GUI 主窗口中可見。
向窗體添加 RowSetTableModel:
- 在 Projects 窗口中,右鍵單擊 RowSetTableModel.java 節點并從彈出菜單中選擇 Copy。
- 將它粘貼到設計區域的任意位置。
設置表模塊的 rowSet 屬性:
- 在 Inspector 中,選擇 rowSetTableModel1 節點。
- 在 Properties 窗口中,單擊省略號按鈕 (...) 打開 rowSet 屬性編輯器。
- 在 Get Parameter From 窗格中,選擇 Bean 單選按鈕。
- 在 Select Bean 組合框中,選擇 jDBCRowSet1。
- 單擊 OK 退出對話框。.
設置 JTable 的模型屬性:
- 在 Inspector 中,選擇 JTable。請注意,當您在窗體中選擇 JTable 時,JScrollPane 組件在 Inspector 窗口中被高亮顯示并且可以在 Properties 窗口中編輯其屬性(不是 JTable 的屬性)。
- 在 Properties 窗口中,單擊省略號按鈕 (...) 打開模型屬性的編輯器。
- 在顯示的模型編輯器中,在 Select Mode 組合框中選擇 Form Connection。
- 選擇 Bean 單選按鈕并在 Component 組合框中選擇 rowSetTableModel1。
- 單擊 OK 關閉編輯器。
要決定表的哪些列在運行時可見,需要明確設置它們。為此,我們需要調整 rowSetTableModel1 的屬性。
設置表列的可見性:
- 在 Inspector 中,選擇 rowSetTableModel1 節點。
- 在 Properties 窗口中,單擊省略號按鈕 (...) 打開 visibleColumns 屬性編輯器。
- 在顯示的編輯器中,在 Item 字段輸入以下列名,每次輸入一個并單擊 Add。
- NICKNAME
- FIRST_NAME
- LAST_NAME
- 單擊 OK 退出對話框。.
IDE 設置窗體的 JTable 以顯示指定的列,并且列標題按它們被添加的順序出現在窗體中。
設置主窗口關閉行為
在應用程序窗口關閉時,要釋放駐留在模型中的各種資源,我們還需要明確指定預期的行為。在本部分,我們將為應用程序主窗口和 Details 對話框,設置控制此行為的事件動作。
為主窗口 Close 按鈕編輯事件動作:
- 右鍵單擊 Close 按鈕并選擇 Events > Action > actionPerformed。
- 在源編輯器中,選擇光標所在的行(它應顯示為 //TODO add your handling code here),在 editContactActionPerformed 方法主體中添加以下代碼:
contactsModel.dispose(); // releases resources held by the model (like DB connection) System.exit(0); // exists the application
- 單擊 Design 按鈕,返回 GUI Builder。
為主窗口編輯事件動作:
- 在 Inspector 中,右鍵單擊 JFrame 容器并選擇 Events > Window >windowClosing。
- 在源編輯器中,選擇光標所在的行。然后添加以下代碼:
contactsModel.dispose(); // releases resources held by the model (like DB connection) System.exit(0); // exists the application
- 再次單擊 Design 按鈕,返回 GUI Builder。 [SPAN]
添加按鈕事件處理程序
為了使主窗口中的各種按鈕引起預期的行為,必須給它們設置動作。本部分正是要完成這一工作,通過定義它們必需的事件處理程序觸發相應的事件。
向 Edit 按鈕添加事件處理程序:
- 右鍵單擊 Edit 按鈕并選擇 Events > Action > actionPerformed。
- 在源編輯器中,選擇光標所在的行。然后添加以下代碼:
- 將以下方法添加到 contactEditor 類主體的代碼中(在或大約在 346 行)。
private void showDetailDialog(boolean inserting)
{
contactsModel.setInsertMode(inserting);
firstNameField.setText(contactsModel.getFirstName());
lastNameField.setText(contactsModel.getLastName());
titleField.setText(contactsModel.getTitle());
nicknameField.setText(contactsModel.getNickname());
displayFormat.setSelectedIndex(contactsModel.getDisplayFormat());
emailField.setText("");
switch (contactsModel.getMailFormat())
{
case 0:
htmlChoice.setSelected(true);
break;
case 1:
plainTextChoice.setSelected(true);
break;
case 2:
customChoice.setSelected(true);
break;
}
javax.swing.DefaultListModel listModel = new javax.swing.DefaultListModel();
Object[] mails = contactsModel.getEmails();
for (int i=0; i<mails.length; i++)
listModel.addElement(mails[i]);
emailsList.setModel(listModel);
details.pack();
details.setVisible(true);
}
IDE 向 Edit 按鈕添加偵聽器使該按鈕能夠在單擊時與 contactsModel 和數據庫交互,
為 Add 按鈕添加事件處理程序:
- 右鍵單擊 Add 按鈕并選擇 Events > Action > actionPerformed。
- 在源編輯器中,選擇光標所在的行。然后添加以下代碼:
showDetailDialog(true);
為 Remove 按鈕添加事件處理程序:
- 右鍵單擊 Remove 按鈕并選擇 Events > Action > actionPerformed。
- 在源編輯器中,選擇光標所在的行。然后添加以下代碼:
contactsModel.removeContact();
設置表的選擇模型
現在是設置表的選擇模型的時候了,它將偵聽模型中屬性的更改并決定是否可以對選定的聯系人進行編輯。請注意,對于本教程,ContactsModel 實現允許編輯或刪除任何選定的聯系人。
設置表的選擇模型:
- 在 Inspector 窗口中,展開 JScrollPane1 節點并選擇 JTable。
- 在 Properties 窗口中,單擊 selectionModel 屬性的省略號按鈕。
- 在顯示的編輯器中,選擇 Property 單選按鈕并單擊省略號按鈕。
- 在打開的 Select Property 對話框中,在組合框中選擇 contactsModel。然后選擇 Properties 窗格中的 contactSelection。
- 單擊 OK 退出對話框。
將 contactsModel 與 Edit 和 Remove 按鈕連接:
- 右鍵單擊設計區域的 Edit 按鈕并從彈出菜單中選擇 Events > PropertyChange > propertyChange。
- 在源編輯器中光標所在的行,復制并粘貼以下代碼。
editContact.setEnabled(contactsModel.isEditingEnabled());
- 為 Remove 按鈕重復此步驟,但這次使用以下代碼:
removeContact.setEnabled(contactsModel.isRemovalEnabled());
IDE 設置這些按鈕以啟用對數據庫聯系人的編輯和刪除。
標簽:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:個人博客