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