将组件绑定到表示数据的 Bean
本节介绍如何将数据绑定到 JTable、JList 和 JComboBox 组件。
将一个数据库表添加到窗体,并自动生成 JTable 以显示数据库表的内容:
打开 "Services"(服务)窗口。
连接到包含您要添加到窗体的表的数据库。(可以通过右键单击用于数据库连接的节点并选择 "Connect"(连接)以连接到数据库。)
*注:*本教程使用 sample [app on App] 数据库,通过选择 "Services"(服务)窗口,展开 "Databases"(数据库)节点,右键单击数据库连接节点 ( jdbc:derby://localhost:1527/sample[app on APP] ),然后从上下文菜单中选择 "Connect"(连接),可连接到该数据库。
如果系统提示您提供用户 ID 和口令,请指定 app 作为用户 ID,并指定 app 作为口令。
展开用于连接的节点,并展开其表节点。
将表节点拖到窗体并在拖至表时按住 Ctrl 键。
这将创建 JTable,并将其列绑定到数据库表中的列。
将数据库表绑定到现有的 JTable 组件:
在 GUI 构建器中右键单击该组件,然后选择 "Bind"(绑定)> "elements"(元素)。
单击 "Import Data to Form"(将数据导入窗体)。在 "Import Data to Form"(将数据导入窗体)对话框中,选择要将组件绑定到的数据库表。单击 "OK"(确定)。
在 "Binding Source"(绑定源)组合框中,选择表示实体类结果列表的项。例如,如果调用实体类 Customer.java ,则列表对象将生成为 customerList 。
将绑定表达式的值保留为 空值 。
如果不想在 JTable 中显示某些数据库列,请在 "Selected"(选定)列表中选择这些列,然后将它们移到 "Available"(可用)列表中。
选择 "Advanced"(高级)标签进一步配置绑定内容。例如,您可以指定验证器或转换器,或者指定绑定源为空值或不可读时的行为。
单击 "OK"(确定)。
将数据绑定到 JList 组件:
在 GUI 构建器中右键单击该组件,然后选择 "Bind"(绑定)> "elements"(元素)。
单击 "Import Data to Form"(将数据导入窗体)。在 "Import Data to Form"(将数据导入窗体)对话框中,选择要将组件绑定到的数据库表。单击 "OK"(确定)。
在 "Binding Source"(绑定源)组合框中,选择表示实体类结果列表的项。例如,如果调用实体类 Customer.java ,则列表对象将生成为 customerList 。
将绑定表达式的值保留为 空值 。
在 "Display Expression"(显示表达式)下拉列表中,选择表示数据库列的属性,该列包含了要在列表中显示的值。
选择 "Advanced"(高级)标签进一步配置绑定内容。
单击 "OK"(确定)。
将数据绑定到 JComboBox 组件:
右键单击组合框,然后选择 "Bind"(绑定)> "elements"(元素)。
单击 "Import Data to Form"(将数据导入窗体)。在 "Import Data to Form"(将数据导入窗体)对话框中,选择要将组件绑定到的数据库表。单击 "OK"(确定)。
在 "Binding Source"(绑定源)组合框中,选择表示实体类结果列表的项。例如,如果调用实体类 Customer.java ,则列表对象将生成为 customerList 。
将绑定表达式值保留为 空值 ,然后单击 "OK"(确定)。
再次右键单击组合框,然后选择 "Bind"(绑定)> "selectedItem"。
绑定到您希望受用户选择影响的属性。
单击 "OK"(确定)保存所做的编辑。
Bean 绑定库(从版本 1.2.1 起)没有 DetailBinding 类,该类用于指定如何为 JComboBox 派生 display 值。因此,您需要编写一些定制代码。一种方法是编写定制单元格呈现器,如下所示。
要正确呈现组合框,请执行以下操作:
选择组合框。
在 "Properties"(属性)窗口的 "Properties"(属性)标签中,选择呈现属性。
单击省略号 (…) 按钮。
在属性编辑器顶部的组合框中,选择 "Custom Code"(定制代码)。
在文本区域中,输入类似以下内容的代码,其中 jComboBox1 是 JComboBox 实例的名称,MyEntityClass 是实体类,getPropertyFromMyEntityClass() 是实体类中要绑定的属性的 getter。
jComboBox1.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value instanceof MyEntityClass) {
MyEntityClass mec = (MyEntityClass)value;
setText(mec.getPropertyFromMyEntityClass());
}
return this;
}
})
*注:*您还可以在其自身的源文件中创建定制呈现器,编译文件,将呈现器拖至窗体,然后设置组合框的呈现器属性以使用此 Bean。