本文共 2156 字,大约阅读时间需要 7 分钟。
下图左侧是三个Radio button,设计的要求是选择不同的radio button,右侧的三个group会分别有不同的可见状态(visible),并且将radio button状态与数据对象绑定
下面是用来实现数据绑定,并在ISideEffect的帮助下完成右边三个组件的可见状态控制。
// 创建SelectObservableValue 对象 SelectObservableValue selectedRadioButtonObservable = new SelectObservableValue(); // 分别将左侧三个Radio Button加入SelectObservableValue ,并指定当其实被选中时SelectObservableValue 对象的Value(如ImageSoureConfig.Type.FILE) selectedRadioButtonObservable.addOption(ImageSoureConfig.Type.FILE, WidgetProperties.selection().observe(this.btnSourceFolder)); selectedRadioButtonObservable.addOption(ImageSoureConfig.Type.FILE_WITH_FACE, WidgetProperties.selection().observe(this.btnSourceFolderByDetect)); selectedRadioButtonObservable.addOption(ImageSoureConfig.Type.DB, WidgetProperties.selection().observe(this.btnSourceDb)); // 将SelectObservableValue 的value与数据对象type绑定 // observablesourceConfig对象类型参见本文附参考资料中的《jface databinding:部分实现POJO对象的监测》 observablesourceConfig.bindValue(selectedRadioButtonObservable, "type"); // 调用ISideEffect.create实现右侧三个组件的可见状态控制 ISideEffect.create( // lambda表达,返回selectedRadioButtonObservable的值 selectedRadioButtonObservable::getValue, // lambda表达式 (type)->{ // 根据selectedRadioButtonObservable的值来控制右侧三个组件的可见状态控制 switch((ImageSoureConfig.Type)type){ case FILE: groupFolder.setVisible(true); groupDetect.setVisible(false); groupDb.setVisible(false); break; case FILE_WITH_FACE: groupFolder.setVisible(true); groupDetect.setVisible(true); groupDb.setVisible(false); break; case DB: groupFolder.setVisible(false); groupDetect.setVisible(false); groupDb.setVisible(true); break; } });
关于ISideEffect的介绍参见我上一篇博客
参考资料: