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 条评论
登录 后参与评论

相关文章

来自专栏DOTNET

Entity Framework——并发策略

使用EF框架遇到并发时,一般采取乐观并发控制。 1支持并发检验 为支持并发检验,需要对实体进行额外的设置。默认情况下是不支持并发检验的。有以下两种方式: ...

44180
来自专栏流媒体人生

ATL源码学习2---聚合的支持

1.COM组件聚合由来      聚合源自组件重用。当有两个组件A和B,他们分别实现了自己的接口IA和IB。如果有 一个客户程序创建了A对象使得自己可以调用I...

9820
来自专栏分布式系统进阶

Cluster版本中的Meta

11840
来自专栏菩提树下的杨过

Lucene.Net 删除索引DeleteDocuments的注意事项

Lucene.Net 在删除索引时,经常会出现代码成功执行,但索引并未正直删除的现象,总结一下,要注意以下因素: 1.在创建Term时,注意Term的key一定...

19860
来自专栏MasiMaro 的技术博文

IRP的同步

以WriteFile为例,一般的同步操作是调用WriteFile完成后,并不会返回,应用程序会在此处暂停,一直等到函数将数据写入文件中并正常返回,而异步操作则是...

18140
来自专栏Java架构沉思录

分布式ID常见解决方案

在分布式系统中,往往需要对大量的数据如订单、账户进行标识,以一个有意义的有序的序列号来作为全局唯一的ID。

67020
来自专栏Java学习123

MyEclipse10.7安装jad反编译插件

32570
来自专栏日常分享

Spring 学习笔记(五)—— Bean之间的关系、作用域、自动装配

  Spring提供了配置信息的继承机制,可以通过为<bean>元素指定parent值重用已有的<bean>元素的配置信息。

10720
来自专栏大内老A

WCF服务的批量寄宿

如果采用自我寄宿的方式,我们需要为每个寄宿的服务创建ServiceHost对象。但是一个应用往往具有很多服务需要被发布,基于单个服务的ServiceHost的创...

203100
来自专栏Java3y

权限管理系统

前言 前面我们做的小项目都是一个表的,业务代码也相对简单。现在我们来做一个权限管理系统,体验一下多表的业务逻辑,顺便巩固一下过滤器的知识。! ---- 目的 现...

30460

扫码关注云+社区

领取腾讯云代金券