专栏首页10km的专栏jface databinding: Radio Button group及ISideEffect绑定数据对象的例子

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

下图左侧是三个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》

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • cmake:install制作简单的安装脚本

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • linux下通过user-config.jam指定编译器编译boost

    bjam是boost的编译工具,类似于gnu make,boost就是用bjam编译的,bjam很聪明,在编译boost的时候,会自动从系统中寻找合适的编译器来...

    用户1148648
  • caffe:cmake编译指定glog,gflag路径

    当使用cmake编译caffe的情况下,在 cmake生成Makefile时会自动找到系统安装的glog,gflag,但是如是我们自己编译了一个glog,gfl...

    用户1148648
  • 人群运动--Scene-Independent Group Profiling in Crowd

    Scene-Independent Group Profiling in Crowd CVPR2014 http://www.ee.cuhk.edu.hk/...

    用户1148525
  • spss C# 二次开发 学习笔记(六)——Spss统计结果的输出

    Spss的二次开发可以很简单,实例化一个对象,然后启用服务,接着提交命令,最后停止服务。 其中重点为提交命令,针对各种统计功能需求,以及被统计分析的数据内容等,...

    用户1637609
  • (三十二) 初遇python之json模块

    各位读者大大们大家好,今天学习python的json模块,并记录学习过程欢迎大家一起交流分享。

    亚乐记
  • 基于 TLS 1.3的微信安全通信协议 mmtls 介绍(上)

    随着近些年网络安全事情的频繁发生,使得用户对网络通信安全的意识越来越强。国内外的网络服务提供商都逐渐提供全站的安全通信服务,如国内的淘宝、百度先后宣布已经完成了...

    张绍文
  • PyTorch6:nn.Linear&常用激活函数

    线性连接层又叫全连接层(fully connected layer),是通过矩阵的乘法将前一层的矩阵变换为下一层矩阵。

    小胡胡说
  • java selenium chromedriver浏览器驱动放在哪里?【两种位置】

    这个位置可以自己指定 比如将驱动放在项目根路径 D:\a-project\mqtest\ 需要在代码中指明driver的路径(绝对路径或相对路径),代码如下

    斑马
  • Redis常用命令整理

            *    匹配任意个(包括0个)字符

    MonroeCode

扫码关注云+社区

领取腾讯云代金券