有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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

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

"selection"是绑定属性,Selection是枚举,这意味着当更改其他按钮时,模型中的selection属性将设置为相应的枚举值

我的问题是:如何将此属性绑定到标签显示的图像

据我所见,JGoodies非常适合将字符串绑定到文本字段,但在本例中,还应该有一个转换,一些逻辑决定将enum属性映射到图像


共 (1) 个答案

  1. # 1 楼答案

    看起来我只是需要仔细看看绑定API。一个AbstractConverter正是我想要的

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

    方法将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到image的转换的地方。我没有实现setValue,因为在这种情况下它没有意义。图像本身无法更改,我只希望更新以单向方式进行——从enum属性到图像