WEB开发网
开发学院软件开发Java 了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数... 阅读

了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数据绑定的优缺点

 2009-12-14 00:00:00 来源:WEB开发网   
核心提示: 从域对象获取值导入模型中整个同步执行过程仍可能好像是在变魔术一样虚幻,但是,了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数据绑定的优缺点(4),事实并不如此,几乎所有流行的 GUI 组件的背后都有一个模型,请注意,这里使用了三个 context.bind() 方法调用,数据

从域对象获取值导入模型中

整个同步执行过程仍可能好像是在变魔术一样虚幻。但是,事实并不如此。几乎所有流行的 GUI 组件的背后都有一个模型。数据绑定框架的任务是获取存储在域对象中的值再导入模型中。框架采用两种方法来执行这项任务。

调整 Bean 字段

一种方法是调整被绑定的 Bean 字段变为组件模型本身。使用这种方法,当组件的视图部分尝试检索或修改值时,它可直接转到 Bean 中的值。JGoodies 数据绑定框架在很多情况下都使用了这种方法。

图 1 显示了 JGoodies 怎样使用 DocumentAdapter 和 PropertyAdapter 类来装饰 Bean 以将其用于 JTextComponent 的模型。


图 1. JGoodies 调整字段用于 JTextComponent 模型
了解 Eclipse 中的 JFace 数据绑定,第 1 部分: 数据绑定的优缺点

查看原图(大图)

自动调用 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(); 
  } 
} 

上一页  1 2 3 4 5 6 7  下一页

Tags:了解 Eclipse JFace

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接