了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数据绑定的优缺点
2009-12-14 00:00:00 来源:WEB开发网
救援的数据绑定
此示例只是一个简单示例,如果要计算构建程序中的组件引用指定,还需要有另外 10 行代码。如果向 Bean 中添加新字段,则需要添加另外三行代码进行初始化以及在 GUI 组件和域模型实现双向同步。重复编写这段代码是十分令人厌烦的,经常会导致将错误引入应用程序中。幸运的是,有更好的解决方案可用。
数据绑定框架使开发人员可以轻松地将 JavaBean 属性与 GUI 组件 “粘” 在一起。JavaBean 属性通常被一个字符串引用,该字符串用于告诉数据绑定框架在 JavaBean 上查找相应的 getter 和 setter。例如,"first" 表示在给定 JavaBean 上有 getFirst() 和 setFirst() 方法。组件将被数据自动初始化。当组件中的值发生改变时,关联的 JavaBean 属性也会随之改变。同样地,JavaBean 支持属性更改侦听程序,因此当 GUI 组件的相应 JavaBean 属性发生改变时,也可以更新 GUI 组件。
还可以配置流行的 Java 数据绑定框架何时同步更改 (通常在按下按键时、单击鼠标时或光标丢失时)。这些数据绑定框架还支持各种 GUI 组件,例如文本字段、复选框、列表和表。
清单 2 显示了重新编写 清单 1 中的代码引用以使用 JGoodies 数据绑定框架。
清单 2. 使用 JGoodies 数据绑定的同一个 Swing 对话框package com.nfjs.examples;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.binding.beans.BeanAdapter;
import com.jgoodies.binding.adapter.BasicComponentFactory;
import javax.swing.*;
import java.awt.event.ActionEvent;
public class BindingExample {
private JFrame frame;
private FormBean bean;
public BindingExample() {
frame = new JFrame();
bean = new FormBean();
BeanAdapter adapter = new BeanAdapter(bean);
JTextField firstField = BasicComponentFactory.createTextField(
adapter.getValueModel("first"));
JTextField lastField = BasicComponentFactory.createTextField(
adapter.getValueModel("last"));
JTextArea descriptionArea = BasicComponentFactory.createTextArea(
adapter.getValueModel("description"));
DefaultFormBuilder builder =
new DefaultFormBuilder(new FormLayout("r:p, 2dlu, f:p:g"));
builder.append("First:", firstField);
builder.append("Last:", lastField);
builder.appendRelatedComponentsGapRow();
builder.appendRow("p");
builder.add(new JLabel("Description:"),
new CellConstraints(1, 5,
CellConstraints.RIGHT,
CellConstraints.TOP),
new JScrollPane(descriptionArea),
new CellConstraints(3, 5,
CellConstraints.FILL,
CellConstraints.FILL));
builder.nextRow(2);
builder.append(new JButton(new MessageAction()));
frame.add(builder.getPanel());
frame.setSize(300, 300);
}
public JFrame getFrame() {
return frame;
}
public class FormBean {
//Same as above
}
private class MessageAction extends AbstractAction {
public MessageAction() {
super("Message");
}
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(null, "First name is " + bean.getFirst());
}
}
public static void main(String[] args) {
BindingExample example = new BindingExample();
example.getFrame().show();
}
}
- ››Eclipse+SVN+Google Code配置过程
- ››eclipse中开发android程序时,打开layout配置文件自...
- ››了解Windows Mobile文件结构
- ››Eclipse快捷键大全
- ››Eclipse Helios 之旅:看看 Eclipse 的最新同步发...
- ››了解 IBM Smart Business Development and Test o...
- ››Eclipse和MyEclipse的关系
- ››Eclipse 环境下的 OpenSocial 开发:通过 Shindig...
- ››Eclipse 向导机制扩展 -- 实现可定制的向导
- ››了解 Apache Click:使用轻量模型快速编写 Web 应...
- ››Eclipse 中的 EJB V3.0 数据库持久化
- ››Eclipse 常用快捷键
更多精彩
赞助商链接