如何将属性(例如枚举)绑定到不同类型的组件属性(例如每个枚举的图像)?

时间:2011-05-10 09:43:31

标签: java binding jgoodies

我继承了一个使用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非常适合将字符串等字符串绑定到文本字段,但在这种情况下,还应该有一个转换,一些逻辑决定将枚举属性映射到图像。

1 个答案:

答案 0 :(得分: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因为在这种情况下没有意义。图像不能自行更改,我只希望更新一种方式 - 从枚举属性到图像。