0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Eclipse插件开发之简单控件封装—那些年冗长的裹脚布

电子设计 来源:电子设计 作者:电子设计 2020-12-24 17:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Hello,大家好~不知道还有没有老朋友记得我。N年前那个写流程自动化测试的程序媛就是我,可能看完那篇文章很多人认为我是自动化测试方向。No,No,No~今天破案了,我真正的主要技术方向——Eclipse插件开发。是的,如此小众的技术,有点疑惑都满网找不到答案的技术。思考了很久这块可以写点啥,基础开发我也不多说了,愿意看这篇文章的我也就默认已经是Eclipse插件开发入门了。

Eclipse插件开发,接触过这块的同学们都知道,无论是控件也好,向导视图也罢。但凡每次开发个不起眼的小功能,从零开始堆代码,都很烦躁,各种composite开始套,各种GridLayout布局开始调。当你的公司要求你开发大量的插件功能时,可能多数的时间你都在堆砌这种烦躁的代码。

在我司的EOS Platform里封装了进行了大量的swt封装,今天我们就来说说其中最基础的控件类封装,即属性编辑器。我们先来看下我们的UI框架。

每个Tab页中我们进行了完整的对象编辑器的封装,每个对象编辑器上,放置了多个属性编辑器。

StringPropertyEditor就是一个属性编辑器,ObjectEditor为一个对象编辑器,我们可以在一个ObjectEditor上添加多个StringPropertyEditor。StringPropertyEditor基础方法(不仅限于所展示的方法):setLabel(String label):标签名称。setPropertyName(String name):Text中value的数据映射key。doAddValidator(IValidator validator):添加校验器。这个时候我们是不是可以看出SWT控件开发和属性编辑器开发的差异了?总结一下:

可以看下我们可以进行多少种不同的控件封装。

看到类名大家应该差不多都清楚每个属性编辑器的大体功能。我们就拿一个StringPropertyEditor看看它是如何封装的吧。

StringPropertyEditor

StringPropertyEditor就是Label+Text,例如:

1.首先它一定是先有一个对象属性的基类AbstractPropertyAccessor,基类中的方法:

这个基类涉及到三个属性:propertyName:value的数据映射key。element:默认为当前对象编辑器中的value对象,可给单个属性编辑器设置单独的value对象。But!该value对象中必须包含propertyName设置的key值。introspector:这是个什么?这是个数据访问接口对象Introspector。该接口定义了如何根据一个名称(propertyName)来访问一个对象(element)中的值。这样设计为了提供灵活性,因为通常访问数据有两种方式。一种是根据Bean的属性进行访问,还有一种是使用Map中的Key进行访问,所以设计这个接口来访问对象中的数据,用户如果需要的话,也可以提供新的实现,如直接访问对象的Field或者其它。简单看下该接口的一个实现类所提供的方法。

通过Property的方式来访问一个Bean对象,在Property 不存在的情况会抛出异常。对于对象的存储用ognl.Ognl来实现。2.AbstractPropertyAccessor基类只是提供了数据层的封装,我们还需要一层封装来提供属性编辑器的基本实现AbstractPropertyEditor,这个类封装了所有控件的布局以及可能的操作。

其实这是相当长的一个封装,抽取出核心事务,我们来说一说。添加控件

这是一个核心的方法,你不需要去调用这个方法,在对象编辑器中的基类里会自动调用来这个方法来绘制所有添加的属性编辑器。buildEditorControl创建用来编辑的SWT控件,即控件,控件的基本提示信息,控件的GridData,控件的错误信息的图片等等。该方法中通过调用保护方法protected abstract IControlCreator createControlCreator()来获取真实的子类控件。getLayoutDataBuilder用来封装控件的布局,同样,子类可以通过重构来改变自己的布局。

这个方法同样是对控件的处理,之所以同控件的添加分开,是因为这个方法中的操作并不是每个控件必须的,根据需要继承开发。这个封装方法中做了两件事,一个是binding,也就是处理控件的联动,这里封装了控件的属性值绑定联动,以及反向绑定的联动处理。另一个就是为当前的编辑控件增加焦点监听器。动态更改控制值

这个方法除了在load的时候会调用,在对象编辑器使用的过程中,控件的联动也会使用到,比如最常见到的,浏览资源,点击浏览的button弹出资源选择框,根据选中的对象回填对象编辑器中的值,就会用到该方法。在这个setValue方法中,是通过数据改变的封装接口去实现的。我们可以看下这个数据改变的容器接口。

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 封装
    +关注

    关注

    128

    文章

    9146

    浏览量

    147908
  • Eclipse
    +关注

    关注

    1

    文章

    119

    浏览量

    22422
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    在windows上用Eclipse IDE调试蜂鸟E203,用的开发板是哪个型号的?

    在windows上用Eclipse IDE调试蜂鸟E203,用的开发板是哪个型号的,有哪位大佬调试出来了,求告知
    发表于 11-07 07:19

    所见即所得——Luban-Lite VS Code插件开发实现“命令行自由”

    NEWS所见即所得!Luban-LiteVSCode插件指南亲爱的开发者朋友们,你是否还在为嵌入式开发中频繁切换命令行而抓狂?配置环境参数如“走迷宫”,编译烧录还需切换AiBurn?今天,匠芯创为您
    的头像 发表于 08-07 15:38 822次阅读
    所见即所得——Luban-Lite VS Code<b class='flag-5'>插件</b>让<b class='flag-5'>开发</b>实现“命令行自由”

    调试工具:Eclipse调试工具栏与窗口的深入分析

    摘要 :在嵌入式系统开发领域,高效的调试工具链对于项目的成功实施具有决定性意义。本文聚焦于 Eclipse 调试工具栏与窗口的功能特性,深入剖析其在嵌入式开发调试过程中的关键作用。以厦门国科安芯
    的头像 发表于 07-07 11:32 634次阅读
    调试工具:<b class='flag-5'>Eclipse</b>调试工具栏与窗口的深入分析

    用 VSCode 编写自己的 KiCad 插件(下)

    “  很多小伙伴都想自己开发 KiCad 插件,但不知从何入手。本文由华秋电子的另一位 KiCad 开发者波波同学撰写,分享了如何快速搭建环境,并开发一个
    的头像 发表于 06-19 11:44 2459次阅读
    用 VSCode 编写自己的 KiCad <b class='flag-5'>插件</b>(下)

    用VSCode编写自己的KiCad插件(上)详细步骤教程

    “  很多小伙伴都想自己开发 KiCad 插件,但不知从何入手。本文由华秋电子的另一位 KiCad 开发者波波同学撰写,分享了如何快速搭建环境,并开发一个
    的头像 发表于 06-17 11:10 2729次阅读
    用VSCode编写自己的KiCad<b class='flag-5'>插件</b>(上)详细步骤教程

    如何在Eclipse ThreadX RTOS中集成SystemView

    可以基于Systemview记录ThreadX操作系统事件并执行分析。我们基于SEGGER Embedded Studio开发环境描述如何在Eclipse ThreadX RTOS中集成SystemView。
    的头像 发表于 05-06 17:11 1179次阅读

    SEGGER SystemView支持Eclipse ThreadX

    SEGGER的实时软件分析工具SystemView v3.60c版本现已支持Eclipse ThreadX(Azure RTOS),用户可以基于Systemview记录ThreadX操作系统事件并执行分析。
    的头像 发表于 04-09 10:43 822次阅读
    SEGGER SystemView支持<b class='flag-5'>Eclipse</b> ThreadX

    Allegro Skill封装功能添加禁区介绍

    定位孔用于固定元件的位置,当元件受到外力作用时,定位孔周围的PCB板可能会发生变形或弯曲,进而导致附近走线断裂或元件焊接点开裂。因此,为确保电路板的可靠性,定位孔周围需要设置单边外扩0.5mm的禁区。那么,在封装编辑中,如何为定位孔添加禁
    的头像 发表于 04-07 17:09 1260次阅读
    Allegro Skill<b class='flag-5'>封装</b>功能<b class='flag-5'>之</b>添加禁<b class='flag-5'>布</b>区介绍

    [迅为]Linux开发小技巧:Remote - SSH插件

    [迅为]Linux开发小技巧:Remote - SSH插件
    的头像 发表于 04-01 15:46 950次阅读
    [迅为]Linux<b class='flag-5'>开发</b>小技巧:Remote - SSH<b class='flag-5'>插件</b>

    PREEvision插件使用场景介绍

    PREEvision插件中心(Add-in House)是Vector中国PREEvision团队针对中国用户开发插件网站。用户可以在这里找到各种场景的扩展插件,包括以太网与SOA设
    的头像 发表于 03-14 13:50 1009次阅读
    PREEvision<b class='flag-5'>插件</b>使用场景介绍

    请问TOUCHGFX中别人封装好的控件容器可以直接使用吗?

    TOUCHGFX中别人封装好的控件容器可以直接使用吗?
    发表于 03-13 08:15

    盘点工程师常用的嵌入式开发工具

    设备。 STM32CubeIDE ST官方免费IDE,集成STM32CubeMX配置工具,适合STM32系列开发Eclipse + 插件(CDT、GNU MCU插件) 开源
    的头像 发表于 02-07 10:06 3763次阅读

    JetBrains IDE上架开发微信小程序的官方插件

    一直以来,小程序开发者必须安装第三方插件,才能在 JetBrains IDE 中进行小程序开发。在 JetBrains Marketplace 上,有关插件已有约 50 万下载量。 对
    的头像 发表于 01-16 17:15 1075次阅读
    JetBrains IDE上架<b class='flag-5'>开发</b>微信小程序的官方<b class='flag-5'>插件</b>

    使用MCUXpresso for VS Code插件开发Zephyr的hello world

    本期来到Zephyr实战经验演练,小编带着大家一起使用MCUXpresso for VS Code插件开发一个属于Zephyr的hello world。
    的头像 发表于 01-03 09:21 1784次阅读
    使用MCUXpresso for VS Code<b class='flag-5'>插件</b><b class='flag-5'>开发</b>Zephyr的hello world

    Kubernetes的CNI网络插件flannel

    Kubernetes设计了网络模型,但却将它的实现讲给了网络插件,CNI网络插件最重要的功能就是实现Pod资源能够跨主机通信。
    的头像 发表于 01-02 09:43 1202次阅读