国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

解析如何開發FineReport的自定義控件

2019-11-26 13:26:32
字體:
來源:轉載
供稿:網友

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,這個代碼就是這樣的,代碼的開發其實只要仔細分析就能夠映射到現實生活中的很多事務處理上面~因為代碼也是人設計的,邏輯總逃脫不了人處理事務的思維。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上思县| 昌宁县| 台东县| 呼玛县| 霍州市| 龙岩市| 民县| 孟村| 集贤县| 彩票| 华安县| 盐亭县| 寿宁县| 利津县| 武穴市| 桂平市| 大冶市| 金昌市| 习水县| 汉源县| 锦屏县| 碌曲县| 奎屯市| 安岳县| 瑞安市| 大化| 兴仁县| 长兴县| 三穗县| 时尚| 沈丘县| 柘荣县| 阳江市| 特克斯县| 榆林市| 尼勒克县| 洛南县| 焦作市| 瑞金市| 松桃| 永泰县|