了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数据绑定的优缺点
2009-12-14 00:00:00 来源:WEB开发网从域对象获取值导入模型中
整个同步执行过程仍可能好像是在变魔术一样虚幻。但是,事实并不如此。几乎所有流行的 GUI 组件的背后都有一个模型。数据绑定框架的任务是获取存储在域对象中的值再导入模型中。框架采用两种方法来执行这项任务。
调整 Bean 字段
一种方法是调整被绑定的 Bean 字段变为组件模型本身。使用这种方法,当组件的视图部分尝试检索或修改值时,它可直接转到 Bean 中的值。JGoodies 数据绑定框架在很多情况下都使用了这种方法。
图 1 显示了 JGoodies 怎样使用 DocumentAdapter 和 PropertyAdapter 类来装饰 Bean 以将其用于 JTextComponent 的模型。
图 1. JGoodies 调整字段用于 JTextComponent 模型
查看原图(大图)
自动调用 getter 和 setter
将模型与 GUI 值同步的另一种方法是当一个值在另一端发生改变时自动调用关系两端的 getter 和 setter。JFace 数据绑定框架使用了这种技术以与 SWT 结合使用。
清单 4 显示了与前述相同的示例用 SWT 和 JFace 数据绑定重写后的结果。这个框架充当的是将字段联系在一起的上下文对象。请注意,这里使用了三个 context.bind() 方法调用,用于将文本控件与 FormBean 字段关联起来。
清单 4. 使用 JFace 数据绑定的同一个 Swing 对话框import org.eclipse.jface.examples.databinding.nestedselection.BindingFactory;
import org.eclipse.jface.internal.databinding.provisional.DataBindingContext;
import org.eclipse.jface.internal.databinding.provisional.description.Property;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class JFaceBindingExample {
private Shell shell;
private FormBean bean;
public void run() {
Display display = new Display();
shell = new Shell(display);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
shell.setLayout(gridLayout);
bean = new FormBean();
DataBindingContext context = BindingFactory.createContext(shell);
Label label = new Label(shell, SWT.SHELL_TRIM);
label.setText("First:");
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
Text text = new Text(shell, SWT.BORDER);
text.setLayoutData(gridData);
context.bind(text, new Property(bean, "first"), null);
label = new Label(shell, SWT.NONE);
label.setText("Last:");
text = new Text(shell, SWT.BORDER);
context.bind(text, new Property(bean, "last"), null);
gridData = new GridData();
gridData.horizontalAlignment = SWT.CENTER;
gridData.horizontalSpan = 2;
Button button = new Button(shell, SWT.PUSH);
button.setLayoutData(gridData);
button.setText("Message");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
MessageBox messageBox = new MessageBox(shell);
messageBox.setMessage("First name is " + bean.getFirst());
messageBox.open();
}
});
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
public static void main(String[] args) {
JFaceBindingExample example = new JFaceBindingExample();
example.run();
}
}
- ››Eclipse 3.7反编译插件的安装
- ››eclipse CDT NDK环境搭建步骤
- ››Eclipse 如何自定义java class注释
- ››eclipse.ini内存设置
- ››Eclipse+PyDev离线配置Python开发环境
- ››Eclipse下jQuery文件报错解决方案
- ››Eclipse快捷键与使用技巧
- ››Eclipse 常用快捷键 常用技巧My Eclipse常用快捷键...
- ››Eclipse快捷键二
- ››Eclipse快捷键一
- ››Eclipse+SVN+Google Code配置过程
- ››eclipse中开发android程序时,打开layout配置文件自...
更多精彩
赞助商链接