一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 解析如何開發FineReport的自定義控件

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

2020-07-15 11:54老A不折騰 Java教程

FineReport作為插件化開發的報表軟件,有些特殊需求的功能需要自己開發,開發的插件包帆軟官方有提提供,可以去帆軟論壇上找,本文將主要介紹如何開發一個自定義控件,這里講講方法論。需要的朋友一起來看下吧

FineReport作為插件化開發的報表軟件,有些特殊需求的功能需要自己開發,開發的插件包帆軟官方有提提供,可以去帆軟論壇上找,本文將主要介紹如何開發一個自定義控件,這里講講方法論。

第一步:實例化一個注冊控件的接口

給四個信息 我們的控件類,界面類,圖標路徑,控件類型名字

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
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
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
(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,這個代碼就是這樣的,代碼的開發其實只要仔細分析就能夠映射到現實生活中的很多事務處理上面~因為代碼也是人設計的,邏輯總逃脫不了人處理事務的思維。

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

原文鏈接:http://www.cnblogs.com/laoA188/p/6183458.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品一区二区在线观看播放 | 欧美在线欧美 | 日本精工厂网址 | 亚洲一区二区三区91 | 国产xx肥老妇视频奂费 | 成人国产在线视频在线观看 | 久久艹影院 | 欧美影院天天5g天天爽 | 色中文网 | 91丝袜足控免费网站xx | 国产99页 | 91影视永久福利免费观看 | 青草国内精品视频在线观看 | 国产精品高清一区二区三区 | 高h细节肉爽文办公室 | 色小妹在线| 成人国产午夜在线视频 | 久久精品国产色蜜蜜麻豆国语版 | 日本网络视频www色高清免费 | 亚洲高清在线视频 | 青青草原国产 | 国产高清国内精品福利 | 男人都懂www深夜免费网站 | 娇妻被又大又粗又长又硬好爽 | 免费视屏| 爸爸的宝贝小说全文在线阅读 | 91制片厂制作传媒免费版樱花 | 国产精品亚洲片在线观看麻豆 | 国产亚洲欧美日韩综合综合二区 | 国产精品久久久久影院色老大 | 亚洲欧美国产精品完整版 | 风间由美在线播放 | 好爽轻点太大了太深了 | 亚洲国产成人精品激情 | 激情五月开心 | 天天色踪合合 | 91一个人的在线观看www | 蜜月aⅴ免费一区二区三区 蜜桃影像传媒推广 | 色哟哟在线资源 | 国产午夜亚洲精品不卡 | 国产亚洲欧美一区二区三区 |