: O. Yuanying

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を利用して、観察可能なインスタンスへと変換(ラップ?)してやる必要がある。