2

JGoodiesBindingを使用してドメインモデルをGUIに接続するプロジェクトを継承しました。しかし、私が見つけたいくつかの矛盾があり、それもいくつかのバグを引き起こします。

この具体的なケースでは、GUIは2つのラジオボタンと1つのラベルで表されます。選択したボタンに応じて、ラベルには特定の画像が表示されます。ボタンは、次のようにさまざまな列挙値にバインドされます。

AbstractValueModel enumSelectionModel = presentationModel.getModel("selection");

radioBtn1 = BasicComponentFactory.createRadioButton(enumSelectionModel,
        Selection.selection1, "");

radioBtn2 = BasicComponentFactory.createRadioButton(enumSelectionModel,
        Selection.selection2, "");

"selection"はバインドされたプロパティであり、SelectionはEnumです。これは、別のボタンが変更さselectionれると、モデルのプロパティが対応するEnum値に設定されることを意味します。

私の質問は、このプロパティをラベルで表示される画像にバインドするにはどうすればよいですか?

私が見たところ、JGoodiesは文字列などをテキストフィールドにバインドするのに優れていますが、この場合、列挙型プロパティを画像にマップすることを決定するいくつかのロジックである変換も必要です。

4

1 に答える 1

3

Binding API を詳しく調べる必要があったようです。アンAbstractConverterはまさに私が探していたものです。

Bindings.bind((JComponent) pictureLabel, "icon", new EnumToIconConverter(enumSelectionModel));

このbindメソッドは、pictureLabel のアイコンを、コンバーターによって記述されたモデルにバインドします。コンバーターは次のようになります。

class EnumToIconConverter extends AbstractConverter {

    EnumToIconConverter(ValueModel subject) {
        super(subject);
    }

    @Override
    public Object convertFromSubject(Object enum) {
        return enum == Selection.selection1 ? image1 : image2;
    }

    @Override
    public void setValue(Object obj) {
        throw new UnsupportedOperationException("setValue makes no sense for this converter");
    }
}

convertFromSubjectメソッドは、Enum からイメージへの変換が行われる場所です。setValueこの場合は意味がないので実装しませんでした。画像は単独で変更することはできません。更新は、enum プロパティから画像への一方向にのみ行いたいと考えています。

于 2011-05-11T09:32:40.600 に答える