在桌面应用程序中实现 Beans 和数据绑定

在桌面应用程序中实现 Beans 和数据绑定

<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> width="300" scrolling="no" height="250" frameborder="0" name="google_ads_frame" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-2332279788637932&dt=1198549096968&lmt=1198549093&output=html&slotname=9916274731&correlator=1198549096968&url=http%3A%2F%2Fwww.netbeans.com.cn%2Fread-htm-tid-256.html&ref=http%3A%2F%2Fnetbeans.csdn.net%2Fpage%2F19682f51-b219-4268-8568-e6e31c1a7e5a&cc=100&ga_vid=485119999.1198549096&ga_sid=1198549096&ga_hid=357603023&ga_fc=true&flash=9&u_h=768&u_w=1024&u_ah=738&u_aw=1024&u_cd=16&u_tz=480&u_his=1&u_java=true&u_nplug=14&u_nmime=49" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true">
By , 11/6/07   

本教程将介绍如何通过 NetBeans IDE 6.0 支持在 Java 桌面应用程序实现 Beans 绑定和数据绑定的 。

内容

简介:NetBeans IDE 6.0 中的 Bean 绑定
对多个属性进行绑定
高级绑定属性
对组件绑定数据
特殊绑定属性
 Content on this page applies to the NetBeans 6.0 IDE

本教程的软件和文件需求

要完成本教程,需要在计算机中安装以下软件:

简介: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 对其提供的支持,我们将实现一个简单的示例,其中用户可以调整滑块来修改文本字段中的数字值。

示例设置如下:

  1. 在 IDE 中,选择 File > New Project。
  2. 选择 Java 类别并选择 Java Application 模板。单击 Next 按钮。
  3. 在向导的 Name 和 Location 页面,执行以下操作:
    • 输入 NumberSlider 作为项目名。
    • 选中 Set As Main Project 复选框。
    • 取消选择 Create Main Class 复选框。
  4. 单击 Finish 按钮退出向导并设置项目。
  5. 在 Projects 窗口中,右键单击 NumberSlider 项目节点并选择 New > JFrame Form。

    (如果 New 菜单中的 JFrame Form 不可用,选择 Other。然后在 New File 向导中,选择 Swing GUI Forms 类别并选择 JFrame Form 模板)。< /p>

    该图显示了 New Java Application 向导的 Name & Location 页面,其中已填入项目信息。

  6. 在向导的 Name and Location 页面中,执行以下操作:
    • 输入 NumberSliderFrame 作为类名。
    • 输入 numberslider 作为包名。

    该图显示了 New JFrame 向导的 Name & Location 页面,其中已填入项目信息。

  7. 单击 Finish 按钮退出向导并创建表单。

    NumberSliderForm.java 将在编辑区域中以设计模式打开。

  8. 在刚刚显示的 Palette 的 Swing Controls 区域中,将滑块控件拖拽到设计区。
  9. 将 Palette 中的文本字段组件拖拽到设计区。

    产生的表单可能类似于下面显示的屏幕截图。但是,控件的摆放位置不会影响演示目的。

    添加了滑块和文本字段的表单。

源和目标

现在我们已经建立好了示例,可以开始创建绑定了。然而,我们首先需要确定分别将哪些组件作为绑定 和绑定 目标。绑定源中的属性值将作为绑定的初始值。

当在 GUI Editor 中进行绑定时,将对目标组件发起绑定,然后在 Bind 对话框中声明绑定源。

在本例中,由于 JSlider 提供了默认值,我们就使用它作为绑定源。

注意:绑定可以是双向的(读/写),因此对目标作出的改动会自动反映到源中。然而,初始绑定的方向总是从源到目标。有关 Update Mode 的信息请参阅 高级绑定配置 小节。

要将滑块绑定到文本字段:

  1. 右键单击文本字段组件并选择 Bind > text 以打开 Bind 对话框。
  2. 从 Binding Source 组合框中选择 jSlider1
  3. 从 Binding Expression 组合框中选择 value int,如下图所示。

    在 Binding Source 组合框中选择值。

  4. 单击 OK 按钮。

您已经将滑块的 value bean 属性绑定到文本字段的 text 值。

在设计区内,文本字段应该显示值 50。该值表示滑块处于正中间的位置,而默认的值的范围为 0 到 100。

现在您可以运行应用程序并查看绑定的运作。

要运行项目:

  1. 选择 Run > Run Main Project。
  2. 在 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 的数据库,请执行以下操作:

  1. 在 Projects 窗口中,右键单击项目并选择 New > Other,选择 Persistence 类别,然后从 Database 模板选择 Entity Classes。< /li>
  2. 在向导的 Database Tables 页面中选择 database connection。
  3. 填充 Available Tables 列后,选择希望在应用程序中使用的表并单击 Add 将它们移动到 Selected Tables 列中,单击 Next 按钮。

    该图显示了 New Entity Classes From Database 向导的 Database Tables 页面,其中选择了 CUSTOMER 和 DISCOUNT_CODE 表。

  4. 在向导的 Entity Classes 页面中,确保 Generate Named Query Annotations for Persistent Fields 对话框被选中。
  5. 根据需求对所生成的类的名称和位置进行自定义。

    显示 New Entity Classes From Database 向导的 Entity Classes 页面。

  6. 单击 Create Persistence Unit 按钮。
  7. 在 Create Persistence Unit 对话框中,确保进行了以下选择:
    • 所选的 Persistence Library 为 TopLink。
    • 所选的 Table Generation Strategy 为 “None”。

      该图显示了 Create Persistence Unit 对话框。

  8. 单击 Finish 按钮。

    您应该能够在 Projects 窗口中看到实体类节点。

将组件绑定到表示数据的 Bean

要将数据绑定到 JTable 组件:

  1. 右键单击 GUI Builder 中的组件并选择 Bind > 元素。
  2. 单击 Import Data to Form 按钮。从 Import Data to Form 对话框中选择希望对其绑定组件的数据库表。单击 OK 按钮。
  3. 在 Binding Source 复选框中,选择表示实体类的结果列表的项。例如,如果调用了实体类 Customer.java,那么将生成 customerList 列表对象。
  4. 保留 Binding Expression 的值为 null
  5. 如果希望将一些数据库列显示在 JTable 中,则从 Selected 列表中选择这些列,然后将它们移动到 Available 列表。
  6. 选择 Advanced 选项卡进一步配置绑定。例如,您可以指定一个验证程序或是转换程序,或者如果绑定源为 null 或不可读时指定行为。
  7. 单击 OK 按钮。

要将数据绑定到 JList 组件:

  1. 右键单击 GUI Builder 中的组件并选择 Bind > 元素。
  2. 单击 Import Data to Form。从 Import Data to Form 对话框中选择希望对其绑定组件的数据库表。单击 OK 按钮。
  3. 从 Binding Source 复选框中选择表示实体类结果列表的项。例如,如果调用了实体类 Customer.java,那么将生成 customerList 类别对象。
  4. 保留 Binding Expression 的值为 null 不变。
  5. 在 Display Expression 下拉列表中,选择表示数据库列的属性,这些数据库列包含希望显示在列表的值。
  6. 选择 Advanced 选项卡进一步配置绑定。
  7. 单击 OK。

注意:您还可以使用 New Java Desktop Application 向导快速创建具有 CRUD 特性(创建、更新和删除)的功能完整的应用程序。然而,最好提前创建所有实体类,以确保所生成的类涵盖了实体间的所有关系。

特殊绑定属性

如果需要,可以使用 bean 绑定库为组件中缺失的一些 Swing 组件提供的人为创建的特殊属性。这些属性表示的内容(如选中的表行)有助于绑定属性。

下面的列表展示了 bean 绑定库添加的一些人为创建的属性:

组件属性说明
AbstractButtonselected选中的按钮状态。
JComboBoxselectedItem选中的 JComboBox 项。
JSlidervalueJSlider 的值;通知所有更改。
value_IGNORE_ADJUSTING与 “value” 相同,但是在滑块调整自身值的时候不会通知更改。
JListselectedElement选中的 JList 元素;通知所有更改。如果 JListBinding 将 JList 作为绑定目标,所选的元素被报告为绑定源列表中的一个元素。否则,选中的元素被报告为列表模型中的对象。如果没有选择元素,属性值将为 null
selectedElements包含选中的 JList 元素的列表;通知所有更改。如果 JListBinding 将 JList 作为绑定目标,所选的元素被报告为绑定源列表中的一个元素。否则,选中的元素被报告为列表模型中的对象。如果没有选择元素,属性值将为一个空列表。
selectedElement_IGNORE_ADJUSTING与 “selectedElement” 相同,但是在更新列表选择时不会通知更改。
selectedElements_IGNORE_ADJUSTING与 “selectedElements” 相同,但是在更新列表选择是不会通知更改。
JTableselectedElement选 中的 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)textJTextComponent 的 text 属性;通知所有更改(包括输入)。
text_ON_FOCUS_LOSTJTextComponent 的 text 属性;只有当组件丢失焦点时通知更改。
text_ON_ACTION_OR_FOCUS_LOSTJTextComponent 的 text 属性;只有当组件通知 actionPerformed 或组件丢失焦点时通知更改。

结束语

有关更全面的 IDE GUI Builder 使用信息,请参阅 GUI Building in NetBeans IDE 5.5。有关 Beans Binding 的更多信息,请参阅 java.net 上的 Beans Binding 项目页面


 


 

注:绑定的路径不能用中文

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值