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

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

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

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 "自定义下拉框";

        }

}

  

第二步,重写控件类

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();

    }

}

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

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

;

(function($){

        FR.CustomComboBoxEditor = FR.extend(FR.ComboBoxEditor, {

                _init: function () {

                        FR.CustomComboBoxEditor.superclass._init.apply(this, arguments);

                }

        });

        $.shortcut("customcombo", FR.CustomComboBoxEditor);

})(jQuery);

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

代码解释

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

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

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

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

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

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

最新文章

  1. 排序 order by 的用法
  2. DataGrid中的事件和方法
  3. SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐
  4. 使用excel结合线性规划求解Holt-Winters参数
  5. No package mysql-server available.
  6. Request中的各种方法
  7. Java开发搜索引擎爬虫
  8. 一键发布ASP.NET Web安装程序
  9. hdu 1166 线段树单点更新
  10. html5向左滑动删除特效
  11. 使用BroadcastReceiver监听系统接收的短信
  12. HDFS文件读写流程
  13. Java 的性能优化
  14. [Unity3D]Unity4全新的动画系统Mecanim
  15. 可存放任意类型变量的动态数组--C语言实现
  16. Elastic FileBeat 快速入门
  17. EF CRUD
  18. R语言绘制茎叶图
  19. 神经网络中的偏置项b到底是什么?
  20. mvn tomcat7:help的14个命令

热门文章

  1. 配置android sdk 环境
  2. .NetCore MVC中的路由(2)在路由中使用约束
  3. 跟我一起云计算(5)——Shards
  4. 【原】Github+Hexo+NextT搭建个人博客
  5. tomcat开发远程调试端口以及利用eclipse进行远程调试
  6. 这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)
  7. MySQL主从环境下存储过程,函数,触发器,事件的复制情况
  8. golang sync.WaitGroup bug
  9. (转载)linux下各个文件夹的作用
  10. 树莓派3B的食用方法-1(装系统 网线ssh连接)