如何开发FineReport的自定义控件?

简介:

ineReport作为插件化开发的报表软件有些特殊需求的功能需要自己开发开发的插件包帆软官方有提提供可以去帆软论坛上找本文将主要介绍如何开发一个自定义控件这里讲讲方法论

第一步:实例化一个注册控件的接口

给四个信息 我们的控件类,界面类,图标路径,控件类型名字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package  com.hg.free.plugin.customcombo.param;
  
import  com.fr.design.designer.creator.XComboBox;
import  com.fr.design.fun.impl.AbstractParameterWidgetOptionProvider;
import  com.fr.form.ui.Widget;
  
public  class  WidgetRegister  extends  AbstractParameterWidgetOptionProvider {
  
         @Override
         public  Class<?  extends  Widget> classForWidget() {
                 return  CustomComboBox. class ;
         }
         
         @Override
         public  Class<?> appearanceForWidget() {
                 return  XComboBox. class ;
         }
  
         @Override
         public  String iconPathForWidget() {
                 return  "/com/fr/web/images/combobox.png" ;
         }
  
         @Override
         public  String nameForWidget() {
                 return  "自定义下拉框" ;
         }
  
}


第二步,重写控件类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package  com.hg.free.plugin.customcombo.param;
  
import  com.fr.form.ui.ComboBox;
import  com.fr.ui.DataFilter;
  
public  class  CustomComboBox  extends  ComboBox {
  
         private  static  final  long  serialVersionUID = 7169771062153345236L;
         
         @Override
         public  String getXType() {
         return  "customcombo" ;
     }
         
         @Override
         protected  DataFilter createDataFilter() {
         return  new  CustomComboBoxDataFilter();
     }
}

 

因为要改变过滤方式,就要重写一个过滤器

1
2
3
4
5
6
7
8
9
10
11
12
package  com.hg.free.plugin.customcombo.param;
  
import  com.fr.form.ui.ComboBoxDataFilter;
  
public  class  CustomComboBoxDataFilter  extends  ComboBoxDataFilter {
         @Override
         public  boolean  isMatch(String txt, String filter) {
                 if ( null ==txt &&  null !=filter) return  false ;
                 if ( null ==txt &&  null ==filter) return  true ;
                 return  txt.indexOf(filter)!=- 1 ;
         }
}

  

第三步,继承前端控件JS

1
2
3
4
5
6
7
8
9
;
(function($){
         FR.CustomComboBoxEditor = FR.extend(FR.ComboBoxEditor, {
                 _init: function () {
                         FR.CustomComboBoxEditor.superclass._init.apply( this , arguments);
                 }
         });
         $.shortcut( "customcombo" , FR.CustomComboBoxEditor);
})(jQuery);

 

好了~以上就是全部的代码开发~然后写个xmlant打包成插件就可以了。

 

代码解释

首先来看这段代码是什么意思呢?

就是我定义了一个控件类型为CustomComboBoxEditor的控件,他继承了ComboBoxEditor的全部方法和属性,并且我把新定义的控件类型的标记声明为customcombo,这个标记有啥用勒,其他用途就不说了,单单说在这里的用途,就是JAVA 本身是不能让前端取生成什么控件的~而是通过告诉前端一个配置,前端的JS引擎(姑且这么称呼他吧)~根据这个配置去执行对应的脚本生成对应的dom样式之类的~shortcut你就这么理解~后台返回一个配置是要生成customcombo这个控件~那么它就像一个map一样找到了对应的键值FR.CustomComboBoxEditor~然后把该控件的配置丢到这个方法里面去执行。就生成我们的控件了。

因为这个例子中并没有对前端有任何修改的要求~所以就没做任何改动~下面看后台。

我们这个例子是要修改模糊匹配的方式。

那么原来控件匹配的机制是怎么搞的,是这样的:假设我是一个老板(妈蛋也只能假设一下了),现在我想了解一份纸质合同的细节,但是公司有一大坨纸质合同我怎么找呢~当然是请个秘书了(美女最好),我告诉她我要的合同大概是有些什么信息~然后她去找出来把最后找到的合同给我就可以了。

我们这里控件ComboBox就是老板,ComboBoxDataFilter就是秘书,就是这么个意思,这里每个秘书肯定都有自己找合同的一套方法,以前那个秘书是只要有点相关的就都找出来了,新来的这个秘书是只找老板提示的信息匹配到的合同~查找匹配的方法就是isMatch,这个代码就是这样的,代码的开发其实只要仔细分析就能够映射到现实生活中的很多事务处理上面~因为代码也是人设计的,逻辑总逃脱不了人处理事务的思维。



本文转自 雄霸天下啦 51CTO博客,原文链接:http://blog.51cto.com/10549520/1883057,如需转载请自行联系原作者

相关文章
|
4月前
|
存储 设计模式 开发框架
总结开发中基于DevExpress的Winform界面效果
总结开发中基于DevExpress的Winform界面效果
|
3月前
|
搜索推荐 数据库
最新UI六零导航系统源码 | 多模版全开源
使用PHP+MySql,增加后台管理 多模板选择,支持在后台切换模板 增加常用搜索引擎,如:知乎、哔哩哔哩、在线翻译等(支持自定义) 支持用户提交收录申请,地址:http://域名/apply 部分模板优化和增加部分功能,如返回顶部、获取输入框焦点、时间日期显示等
75 1
|
6月前
|
搜索推荐 C#
一个适用于定制个性化界面的WPF UI组件库
一个适用于定制个性化界面的WPF UI组件库
113 0
|
文字识别 自然语言处理 程序员
一个支持WinForms换肤的开源组件
一个支持WinForms换肤的开源组件
60 0
|
程序员 C语言
Qt编写自定义控件50-迷你仪表盘
一、前言 这个控件取名叫迷你仪表盘,是以为该控件可以缩小到很小很小的区域显示,非常适合小面积区域展示仪表数据使用,还可以手动触摸调节进度,是我个人觉得最漂亮小巧的一个控件。初次看到类似的控件是在一个音乐视频编辑软件中,用来展示左通道右通道音量等,有非常多的类似的迷你仪表盘在整个软件系统中,用户可以直接鼠标滑动调节,以最小的占用区域展示最大的信息,漂亮!本控件还拓展了可以左右等分显示,比如中间的值是0,左侧就是低于0的值区域,右侧就是大于0的值区域,进度不一样展示,支持左右旋转角度设置以及各种颜色的设置。
911 0
|
程序员 开发工具 C语言
Qt编写自定义控件1-汽车仪表盘
一、前言 汽车仪表盘几乎是qt写仪表盘控件中最常见的,一般来说先要求美工做好设计图,然后设计效果图给到程序员,由程序员根据效果来实现,主要靠贴图,这种方法有个好处就是做出来的效果比较逼真,和真实效果图基本上保持一致,而且程序员也不会那么累,基本上入门级别的程序员都可以搞定,效率比较高,缺点是如果用户需要更改某个部件的颜色,比如指针的颜色等,需要重新做效果图贴图才能实现,比较麻烦,还有一点就是如果效果图原图不是很大,则遇到特殊分辨率情况下,可能会有失真的情况,被强制拉伸等。
1222 0
|
测试技术
艾伟:WinForm控件开发总结(二)------使用和调试自定义控件
在上一篇文章里我们创建了一个简单的控件FirstControl,现在我来介绍一下怎么使用和调试自己的控件。我希望将过程写的尽可能的详细,让想学习控件开发的朋友容易上手,高手们见谅。       在同一个solution里添加一个Windows Application工程(在Solution Explorer里右键点击CustomControlSample solution选择Add->New Project…),命名为TestControl。
893 0
下一篇
无影云桌面