2

我继承了一个使用 JGoodies Binding 将域模型连接到 GUI 的项目。但是,我发现了一些不一致的地方,这也导致了一些错误。

在这个具体案例中,GUI 由两个单选按钮和一个标签表示。根据选择的按钮,标签应显示特定图像。这些按钮绑定到不同的枚举值,如下所示:

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。AnAbstractConverter正是我想要的。

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方法是完成从枚举到图像的转换的地方。我没有实施setValue,因为在这种情况下没有任何意义。图像不能自行更改,我只希望更新以一种方式进行 - 从枚举属性到图像。

于 2011-05-11T09:32:40.600 回答