您的位置:首页 > Web前端

jface databinding: Radio Button group及ISideEffect绑定数据对象的例子

2016-12-25 18:25 447 查看
下图左侧是三个Radio button,设计的要求是选择不同的radio button,右侧的三个group会分别有不同的可见状态(visible),并且将radio button状态与数据对象绑定



下面是用SelectObservableValue来实现数据绑定,并在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的介绍参见我上一篇博客《jface databinding:更简单的ISideEffect实现多目标单边数据绑定塈其原理分析》

参考资料:

《Binding values of a radio button group》

《jface databinding:部分实现POJO对象的监测》

《SelectObservableValue》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息