Java でプロパティ エディタ ウィジェットを作成しています。このウィジェットは、Java Bean を取り込み、そのコピーを作成し、その Bean 内のフィールドを表すスイング コンポーネントを含む JPanel を動的に作成します。メソッド getFinishedBean() が呼び出されたときに、swing コンポーネントで設定された値に設定されたフィールドでコピーが返されるように、swing コンポーネントをコピーにバインドしたいと考えています。各フィールドをループし、そのタイプを決定し、適切な JComponent を作成し、そのコンポーネントを Bean コピーにバインドし、コンポーネントをパネルに追加することで、これを実行しようとしました。私の問題は、Bean のプロパティがバインドされていないように見えることです。
これはバインディング コードです。
if((component instanceof JCheckBox))
{
JCheckBox checkBox = (JCheckBox) component;
BeanProperty<JCheckBox, Boolean> jCheckBoxBeanProperty = BeanProperty.create("selected");
BeanProperty<T, Boolean> beanProperty = BeanProperty.create(field.getName());
AutoBinding<JCheckBox, Boolean, T, Boolean> autoBinding = Bindings.createAutoBinding(
UpdateStrategy.READ,
checkBox, jCheckBoxBeanProperty, finishedBean, beanProperty);
autoBinding.bind();
builder.append(field.getName() + ":", checkBox);
}
このコード セクションにはコンパイル エラーや警告はありませんが、finishedBean のプロパティは変更されません。JComponents から完成した Bean に値を取得する必要があるだけです。