程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在桌面應用程序中實現Beans和數據綁定

在桌面應用程序中實現Beans和數據綁定

編輯:關於JAVA

本教程的軟件和文件需求

要完成本教程,需要在計算機中安裝以下軟件:

NetBeans IDE 6.0。

Java Standard Development Kit (JDK) version 5.0 or 6.0

簡介:NetBeans IDE 6.0 中的 Bean 綁定

在還沒有發布 bean 綁定庫的時候,通常很難將 UI 組件連接到數據庫或者使組件屬性值保持同步。例如,要在 JTable 中顯示來自標准數據庫的數據,需要手動創建實用類來處理數據庫和 JTable 之間的連接。而要使不同 bean 屬性的值(例如描繪可見 bean 的 JTextField 的值)保持同步則需要親自編寫偵聽程序和事件處理程序。

bean 綁定庫對所有這些操作進行了簡化和標准化。您僅需編寫幾行代碼來確定哪些組件的哪些屬性需要保持同步,余下的工作則由 bean 綁定庫負責完成。在 NetBeans IDE 中,bean 綁定特性被集成到了 GUI Builder 中,因此在確定可視設計之後,您可以立刻編寫應用程序的行為。

本教程概述了 IDE bean 綁定的主要方面。要了解眾多特性的具體應用,請閱讀 構建 Java 桌面數據庫應用程序教程。

對多個屬性進行綁定

本質上講,bean 綁定就是一種不需要偵聽事件和處理代碼就可連接 bean 屬性的方法。

為解釋 bean 綁定的概念以及 IDE 對其提供的支持,我們將實現一個簡單的示例,其中用戶可以調整滑塊來修改文本字段中的數字值。

示例設置如下:

在 IDE 中,選擇 File > New Project。

選擇 Java 類別並選擇 Java Application 模板。單擊 Next 按鈕。

在向導的 Name 和 Location 頁面,執行以下操作:

輸入 NumberSlider 作為項目名。

選中 Set As Main Project 復選框。

取消選擇 Create Main Class 復選框。

單擊 Finish 按鈕退出向導並設置項目。

在 Projects 窗口中,右鍵單擊 NumberSlider 項目節點並選擇 New > JFrame Form。

(如果 New 菜單中的 JFrame Form 不可用,選擇 Other。然後在 New File 向導中,選擇 Swing GUI Forms 類別並選擇 JFrame Form 模板)。< /p>

在向導的 Name and Location 頁面中,執行以下操作:

輸入 NumberSliderFrame 作為類名。

輸入 numberslider 作為包名。

單擊 Finish 按鈕退出向導並創建表單。

NumberSliderForm.java 將在編輯區域中以設計模式打開。

在剛剛顯示的 Palette 的 Swing Controls 區域中,將滑塊控件拖拽到設計區。

將 Palette 中的文本字段組件拖拽到設計區。

產生的表單可能類似於下面顯示的屏幕截圖。但是,控件的擺放位置不會影響演示目的。

源和目標

現在我們已經建立好了示例,可以開始創建綁定了。然而,我們首先需要確定分別將哪些組件作為綁定 源 和綁定 目標。綁定源中的屬性值將作為綁定的初始值。

當在 GUI Editor 中進行綁定時,將對目標組件發起綁定,然後在 Bind 對話框中聲明綁定源。

在本例中,由於 JSlider 提供了默認值,我們就使用它作為綁定源。

注意:綁定可以是雙向的(讀/寫),因此對目標作出的改動會自動反映到源中。然而,初始綁定的方向總是從源到目標。有關 Update Mode 的信息請參閱 高級綁定配置 小節。

要將滑塊綁定到文本字段:

右鍵單擊文本字段組件並選擇 Bind > text 以打開 Bind 對話框。

從 Binding Source 組合框中選擇 jSlider1。

從 Binding Expression 組合框中選擇 value int,如下圖所示。

單擊 OK 按鈕。

您已經將滑塊的 value bean 屬性綁定到文本字段的 text 值。

在設計區內,文本字段應該顯示值 50。該值表示滑塊處於正中間的位置,而默認的值的范圍為 0 到 100。

現在您可以運行應用程序並查看綁定的運作。

要運行項目:

選擇 Run > Run Main Project。

在 Run Project 對話框中,單擊 OK 按鈕將 numberslider.NumberSliderForm 設置為主類。

應用程序將從一個獨立的窗口中啟動。調整所運行應用程序中的滑塊並觀察文本字段的值是否發生變化。

高級綁定配置

上面的示例顯示了使用默認行為的簡單綁定。但是,某些時候您希望或需要配置不同的綁定。如果是這樣,則可以使用 Binding 對話框的 Advanced 選項卡。

對話框的 Advanced 選項卡包含以下字段:

Name。使您能夠為綁定創建一個名字,從而可以更加靈活地管理綁定。綁定的名字被添加到綁定構造函數中,並且可以被綁定的 getName() 方法引用。

Update Mode。指定實現屬性同步的方法。可能的值包括:

始終執行同步(讀/寫)。無論何時只要對源或目標作出更改,與之相應的另一方也將被更新。

只從源進行讀取(只包括讀)。只有首次設定源值時對目標進行更新。當對源作出修改時,將對目標進行更新。而對目標作出的修改不會更新到源中。

只對源進行一次讀取(只讀取一次)。 只有第一次綁定目標和源時對目標進行更新。

Update Source When (只對 JTextField 和 JTextArea 組件的 text 屬性起作用)。使您能夠選擇與屬性進行同步的頻率。

Ignore Adjusting(只對 JSlider 的 value 屬性、JTable 和 JList 的 selectedElement 屬性、JTable 和 JList 的 selectedElements 屬性起作用)。如果選中該復選框,在用戶完成更改之前,對某個屬性的所有更改不會傳遞到與之對應的屬性中。例如,當應用程序的用戶拖動滑塊時,與滑塊的 value 屬性相綁定的屬性的值只有在用戶釋放鼠標後才會更新。

Converter。如果綁定包含不同數據類型的屬性,則可以指定代碼在類型之間轉換值。beans 綁定庫可以處理很多常見的轉換,但是對於其他的屬性類型組合,您需要提供自己的轉換程序。這類轉換程序需要擴展 org.jdesktop.beansbinding.Converter 類。

可以使用作為 bean 添加到表單的任何轉換程序填充 Converter 下拉列表。您還可以直接添加轉換代碼,方法為單擊 ellipsis (...) 按鈕,然後從 Select Converter Property Using 下拉列表中選擇 Custom Code。

Validator。使您能夠指示代碼驗證目標屬性值的更改,然後將該更改傳遞回源屬性中。這種驗證程序需要擴展 org.jdesktop.beansbinding.Validator 類。

可以使用作為 bean 添加到表單的任何驗證程序填充 Validator 下拉列表。您還可以直接添加驗證代碼,方法為單擊 ellipsis (...) 按鈕,然後從 Select Validator Property Using 下拉列表中選擇 Custom Code。

Null Source Value。在嘗試綁定時,如果源屬性具有一個 null 值,則該字段可以使您指定一個不同的值使用。該字段對應於 org.jdesktop.beansbinding.Binding 類的 setSourceNullValue() 方法。

Unreadable Source Value。在嘗試綁定時,如果無法解析綁定表達式,該字段可以使您能夠指定一個不同的值來使用。該字段對應於 org.jdesktop.beansbinding.Binding 類的 setSourceUnreadableValue() 方法。

為了更好地理解以上提到的類和方法,您可以直接通過 IDE 方法 beans 綁定 Javadoc 文檔。選擇 Help > Javadoc References > Beans Binding。在打開的浏覽器窗口中,單擊 org.jdesktop.beansbinding 鏈接可以訪問這些類的文檔。

對組件綁定數據

創建完新 Java 表單並向其中添加了組件後,您可以生成代碼來為這些組件綁定數據。使用 IDE 可以輕松地將數據綁定到 Swing JTable、JList 和 JComboBox 組件。< /p>

在將數據庫中的數據綁定到組件之前,您需要執行以下操作:

將 IDE 連接到一個數據庫。

向 GUI Builder 中的表單添加組件。

創建需要進行綁定的代表數據庫表的類。下面介紹了將數據綁定到組件的實體類的創建步驟。

創建實體類

要創建實體類並使用它表示綁定到 JTable 的數據庫,請執行以下操作:

在 Projects 窗口中,右鍵單擊項目並選擇 New > Other,選擇 Persistence 類別,然後從 Database 模板選擇 Entity Classes。< /li>

在向導的 Database Tables 頁面中選擇 database connection。

填充 Available Tables 列後,選擇希望在應用程序中使用的表並單擊 Add 將它們移動到 Selected Tables 列中,單擊 Next 按鈕。

在向導的 Entity Classes 頁面中,確保 Generate Named Query Annotations for Persistent Fields 對話框被選中。

根據需求對所生成的類的名稱和位置進行自定義。

單擊 Create Persistence Unit 按鈕。

在 Create Persistence Unit 對話框中,確保進行了以下選擇:

所選的 Persistence Library 為 TopLink。

所選的 Table Generation Strategy 為 “None”。

單擊 Finish 按鈕。

您應該能夠在 Projects 窗口中看到實體類節點。

將組件綁定到表示數據的 Bean

要將數據綁定到 JTable 組件:

右鍵單擊 GUI Builder 中的組件並選擇 Bind > 元素。

單擊 Import Data to Form 按鈕。從 Import Data to Form 對話框中選擇希望對其綁定組件的數據庫表。單擊 OK 按鈕。

在 Binding Source 復選框中,選擇表示實體類的結果列表的項。例如,如果調用了實體類 Customer.java,那麼將生成 customerList 列表對象。

保留 Binding Expression 的值為 null。

如果希望將一些數據庫列顯示在 JTable 中,則從 Selected 列表中選擇這些列,然後將它們移動到 Available 列表。

選擇 Advanced 選項卡進一步配置綁定。例如,您可以指定一個驗證程序或是轉換程序,或者如果綁定源為 null 或不可讀時指定行為。

單擊 OK 按鈕。

要將數據綁定到 JList 組件:

右鍵單擊 GUI Builder 中的組件並選擇 Bind > 元素。

單擊 Import Data to Form。從 Import Data to Form 對話框中選擇希望對其綁定組件的數據庫表。單擊 OK 按鈕。

從 Binding Source 復選框中選擇表示實體類結果列表的項。例如,如果調用了實體類 Customer.java,那麼將生成 customerList 類別對象。

保留 Binding Expression 的值為 null 不變。

在 Display Expression 下拉列表中,選擇表示數據庫列的屬性,這些數據庫列包含希望顯示在列表的值。

選擇 Advanced 選項卡進一步配置綁定。

單擊 OK。

注意:您還可以使用 New Java Desktop Application 向導快速創建具有 CRUD 特性(創建、更新和刪除)的功能完整的應用程序。然而,最好提前創建所有實體類,以確保所生成的類涵蓋了實體間的所有關系。

特殊綁定屬性

如果需要,可以使用 bean 綁定庫為組件中缺失的一些 Swing 組件提供的人為創建的特殊屬性。這些屬性表示的內容(如選中的表行)有助於綁定屬性。

下面的列表展示了 bean 綁定庫添加的一些人為創建的屬性:

組件 屬性 說明 AbstractButton selected 選中的按鈕狀態。 JComboBox selectedItem 選中的 JComboBox 項。 JSlider value JSlider 的值;通知所有更改。 value_IGNORE_ADJUSTING 與 “value” 相同,但是在滑塊調整自身值的時候不會通知更改。 JList selectedElement 選中的 JList 元素;通知所有更改。如果 JListBinding 將 JList 作為綁定目標,所選的元素被報告為綁定源列表中的一個元素。否則,選中的元素被報告為列表模型中的對象。如果沒有選擇元素,屬性值將為 null。 selectedElements 包含選中的 JList 元素的列表;通知所有更改。如果 JListBinding 將 JList 作為綁定目標,所選的元素被報告為綁定源列表中的一個元素。否則,選中的元素被報告為列表模型中的對象。如果沒有選擇元素,屬性值將為一個空列表。 selectedElement_IGNORE_ADJUSTING 與 “selectedElement” 相同,但是在更新列表選擇時不會通知更改。 selectedElements_IGNORE_ADJUSTING 與 “selectedElements” 相同,但是在更新列表選擇是不會通知更改。 JTable selectedElement 選中的 JTable 元素;通知所有更改。如果 JTableBinding 將 JTable 作為綁定目標,所選的元素被報告為綁定源列表中的一個元素。否則,選中的元素被報告為一個映射,其中的鍵由字符串 “column” 加列索引組成,其中的值為該列的模型值。例如: {column0=column0value, column1=column1value, ...} 如果沒有選擇元素,屬性值將為 null。 selectedElements 包含選中的 JTable 元素的列表;通知所有更改。如果 JTableBinding 將 JTable 作為綁定目標,所選的元素被報告為綁定源列表中的一個元素。否則,選中的元素被報告為一個映射,其中的鍵由字符串 “column” 加列索引組成,其中的值為該列的模型值。例如: {column0=column0value, column1=column1value, ...}如果沒有選擇元素,屬性值將為一個空列表。 selectedElement_IGNORE_ADJUSTING 與 “selectedElement” 相同,但是在更新表選擇期間不會通知更改。 selectedElements_IGNORE_ADJUSTING 與 “selectedElements” 相同,但是在更新表選擇期間不會通知更改。 JTextComponent(包括其子類 JTextField、JTextArea 和 JEditorPane) text JTextComponent 的 text 屬性;通知所有更改(包括輸入)。 text_ON_FOCUS_LOST JTextComponent 的 text 屬性;只有當組件丟失焦點時通知更改。 text_ON_ACTION_OR_FOCUS_LOST JTextComponent 的 text 屬性;只有當組件通知 actionPerformed 或組件丟失焦點時通知更改。

向我們反饋

結束語

有關更全面的 IDE GUI Builder 使用信息,請參閱 GUI Building in NetBeans IDE 5.5。有關 Beans Binding 的更多信息,請參閱 java.net 上的 Beans Binding 項目頁面。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved