jgoodies.binding

JavaのSwingコンポーネントとBeanのプロパティを簡単に同期できる機能を提供するjgoodies.bindingだが、残念ながら日本語で取り扱っているページが少ない。
JavaDocも英語しかないし。

今回はメモ程度に記載。

サンプルプログラムはここ(↓)とかにあります。
Data Binding « Swing Components « Java

◆Beanについて
ここで言うBeanとは、Modelクラス(jgoodies.bindで定義されているインタフェース)を継承したJavaBean.
かつ、セッターで、firePropertyChangeメソッドを読んでいること。
この関数がオブザーバの役割を果たす。
たとえば、↓みたいセッターを作成する。

void setA(int a){
int old = this.a;
this.a = a;
firePropertyChange("a",old,a);
}

◆ValueModel
インタフェース。Beanの一プロパティに対応する。
対応付けは、BeanAdaptarやPropertyAdaptayクラスを用いると簡単にできる。

BeanAdapter beanAdaptar = new BeanAdapter(bean);
ValueModel model = beanAdaptar.getValueModel(beanのプロパティ名);

※BeanAdaptarで作成されるValueModelの実装クラスは、simpleBeanAdaptar。
 PropertyAdaptayはそのものがValueModelの実装クラス。

◆Swingコンポーネントとのbind
BasicComponentFactoryクラスのメソッドでバインドできる。
たとえば、JTextFiledであれば、下記のような感じ。

JTextFiled text = BasicComponentFactory.createJTextFlile(ValueModel);

◆ValueModelの実装クラス
(1)ValueHolder
単純な実装クラス。一般的な値に対するValueMoldeオブジェクト。
(2)SimplePropertyAdapter
BeanAdapter#getValueModel(String propertyName)で取得されるオブジェクト。
(3)BufferedValueModel
Triggerクラスと連携することで、Undo機能を実現するクラス。
(4)PresentationModel
ValueModelではなく、複数のValueModelを管理するクラス。BufferedValueModelも管理できる。一つのダイアログ上で、複数のBeanプロパティと複数のSwingコンポーネントを同期させたい場合に便利。
(5)SelectionInList
ツリーやテーブルなどのSwingコンポーネントと同期をとるためのクラス。
このクラス自体は、ValueModelの継承クラスではない。

◆その他
(1)PropertyConnector
2つのオブジェクトの指定したプロパティ同士を同期させるクラス。
(2)BoundedRangeAdapter
SwingのJSliderとの同期に特化したValueModelを作成するクラス。



他にも色々便利なクラスがあるのかもしれません。