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

相关文章

来自专栏漫漫全栈路

ASP.NET MVC学习笔记06编辑方法和编辑视图

上一篇中,说到了MVC生成的Index方法,和Details方法,现在来说一下自动生成的方法和视图,应该怎么的来进行编辑。 优化日期显示 在这之前,先对前面的...

3385
来自专栏nummy

Vim块列操作

在 word中有一个功能,按alt加鼠标拖动,可以拖出矩形块,在vim同样具有此功能。 如:

743
来自专栏技术博客

Knockout.Js官网学习(简介)

最近一段时间在网上经常看到关于Knockout.js文章,于是自己就到官网看了下,不过是英文的,自己果断搞不来,借用google翻译了一下。然后刚刚发现在建立a...

642
来自专栏别先生

PowerDesigner最基础的使用方法入门学习

1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自行学习) 我的PowerDesigner版本是16.5的,如若版本不...

9568
来自专栏IMWeb前端团队

开源跨平台移动项目Ngui【Action动作系统】

Ngui简介 这是一个GUI的排版显示引擎和跨平台的GUI应用程序开发框架,基于NodeJS/OpenGL,这也是第一个在移动端Android/iOS融合Nod...

2055
来自专栏有趣的django

python爬虫入门(三)XPATH和BeautifulSoup4

 XML和XPATH 用正则处理HTML文档很麻烦,我们可以先将 HTML文件 转换成 XML文档,然后用 XPath 查找 HTML 节点或元素。 XML 指...

3044
来自专栏Flutter入门

Flutter入门三部曲(3) - 数据传递/状态管理

Flutter数据传递 分为两种方式。一种是沿着数的方向从上向下传递状态。另一种是 从下往上传递状态值。

4393
来自专栏开源优测

Python自定义HtmlTestRunner测试报告

简述 使用selenium webdriver + Python做自动化测试,执行完成后要生成测试报告,Python我们使用的HTMLtest...

3278
来自专栏从零开始学自动化测试

python接口自动化7-参数关联

前言 我们用自动化发帖之后,要想接着对这篇帖子操作,那就需要用参数关联了,发帖之后会有一个帖子的id,获取到这个id,继续操作传这个帖子id就可以了 一、删...

2744
来自专栏NetCore

流畅地HtmlHelper-Asp.Net MVC

今天抛开 Fluent NHibernate 不谈,我们来谈谈 Asp.Net MVC ,在MVC的View中,我们经常会使用HtmlHelper来生成各种ht...

1868

扫码关注云+社区