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

相关文章

来自专栏雨过天晴

原 PHPStrom 9系列激活码

1364
来自专栏java一日一条

RabbitMQ之消息确认机制(事务+Confirm)

在使用RabbitMQ的时候,我们可以通过消息持久化操作来解决因为服务器的异常奔溃导致的消息丢失,除此之外我们还会遇到一个问题,当消息的发布者在将消息发送出去之...

633
来自专栏Code_iOS

iOS 网络编程(二)TCP协议小结

两个应用程序通过T C P连接交换8 bit字节构成的字节流。T C P不在字节流中插入记录标识符

531
来自专栏Java架构师历程

socket、tcp、udp、http 的认识及区别

在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。

1253
来自专栏Java面试笔试题

持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些?

所谓”持久”就是将数据保存到可掉电式存储设备中以便今后使用,简单的说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。持久层就...

782
来自专栏北京马哥教育

最全服务器模型详解——从单线程阻塞到多线程非阻塞

前言的前言 服务器模型涉及到线程模式和IO模式,搞清楚这些就能针对各种场景有的放矢。该系列分成三部分: 单线程/多线程阻塞I/O模型 单线程非阻塞I/O模型...

3275
来自专栏java初学

TCP/IP三次握手与四次挥手

2627
来自专栏林德熙的博客

win10 uwp 绑定静态属性

这样写的具体参见:http://www.jaylee.org/post/2012/03/07/Xaml-integration-with-WinRT-and-t...

472
来自专栏技术小讲堂

探寻ASP.NET MVC鲜为人知的奥秘(2):与Entity Framework配合,让异步贯穿始终

Why 在应用程序,尤其是互联网应用程序中,性能一直是很多大型网站的困扰,由于Web2.0时代的到来,人们更多的把应用程序从C/S结构迁移到B/S结构,这样会带...

2937
来自专栏架构师之路

Unix网络编程常用函数深度解析(干货)

linux网络编程常用函数说明 connect函数 int connect (int sockfd,struct sockaddr * serv_addr,in...

34510

扫码关注云+社区