JFace Data Binding
JFace Data Bindingのver1.0がEclipse 3.3に標準添付されているのでちょっと使ってみよう。
まずは簡単にテキストフィールドとモデルのプロパティをバインディング。
public class Person {
private String name;
... setter and getter...
}
というモデルがあったとして、そのnameプロパティテキストフィールドにバインドします。
Shell shell = ...
Person person = ...
// デフォルトのレルムを設定する。
Realm.setDefault(SWTObservables.getRealm(shell.getDisplay()));
// バインド先のテキストフィールドを生成。
// とくに変わった事はしていない。
Text name = new Text(shell, SWT.BORDER);
// バインド
DataBindingContext bindingContext = new DataBindingContext();
bindingContext.bindValue(SWTObservables.observeText(name, SWT.Modify),
BeansObservables.observeValue(person, "name"), null);
あら簡単。
bindingContext.bindValue(SWTObservables.observeText(name, SWT.Modify),
BeansObservables.observeValue(person, "name"), null);
でテキストフィールドとモデルのnameプロパティをバインドしている。
DataBindingContext#bindValue()の第一引数と第二引数は、IObservableValueインタフェースを実装したクラスをとり、要するに観察可能な値ならばなんでもバインドしてくれる。
標準のTextクラスや、モデル Personのnameプロパティは観察可能ではないので、 SWTObservables.observeText()や BeansObservables.observeValueを利用して、観察可能なインスタンスへと変換(ラップ?)してやる必要がある。