1

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 に値を取得する必要があるだけです。

4

1 に答える 1

0

クレオパトラが言ったように、バインディングは適応されているので、適切にバインドする必要があります。

プロパティは、状態の変化時に伝播されないため、 (またはなどから拡張されるその他のコンポーネント)selectedに直接バインドすることはできません。バインディングは をインストールしますが、コンポーネントは変更をリッスンするために を必要とします。JCheckBoxJToggleButtonJRadioButtonPropertyChangeListenerItemListener

次の 2 つのオプションがあります。

  • 発生時にプロパティの変更を発生させるアドオンのJCheckBox作成を拡張します。またItemListenerselectedItemEvent
  • action.selectedボタン自体とは異なり、Action含まれている は実際にプロパティの変更を伝播し、バインドできるため、bean プロパティを使用します。

よりクリーンなため、2 番目のオプションをお勧めします。

于 2013-03-11T12:48:38.413 に答える