91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何開發FineReport的自定義控件?

發布時間:2020-07-29 04:17:25 來源:網絡 閱讀:551 作者:雄霸天下啦 欄目:開發技術

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/p_w_picpaths/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);

 

好了~以上就是全部的代碼開發~然后寫個xmlant打包成插件就可以了。

 

代碼解釋

首先來看這段代碼是什么意思呢?

就是我定義了一個控件類型為CustomComboBoxEditor的控件,他繼承了ComboBoxEditor的全部方法和屬性,并且我把新定義的控件類型的標記聲明為customcombo,這個標記有啥用勒,其他用途就不說了,單單說在這里的用途,就是JAVA 本身是不能讓前端取生成什么控件的~而是通過告訴前端一個配置,前端的JS引擎(姑且這么稱呼他吧)~根據這個配置去執行對應的腳本生成對應的dom樣式之類的~shortcut你就這么理解~后臺返回一個配置是要生成customcombo這個控件~那么它就像一個map一樣找到了對應的鍵值FR.CustomComboBoxEditor~然后把該控件的配置丟到這個方法里面去執行。就生成我們的控件了。

因為這個例子中并沒有對前端有任何修改的要求~所以就沒做任何改動~下面看后臺。

我們這個例子是要修改模糊匹配的方式。

那么原來控件匹配的機制是怎么搞的,是這樣的:假設我是一個老板(媽蛋也只能假設一下了),現在我想了解一份紙質合同的細節,但是公司有一大坨紙質合同我怎么找呢~當然是請個秘書了(美女最好),我告訴她我要的合同大概是有些什么信息~然后她去找出來把最后找到的合同給我就可以了。

我們這里控件ComboBox就是老板,ComboBoxDataFilter就是秘書,就是這么個意思,這里每個秘書肯定都有自己找合同的一套方法,以前那個秘書是只要有點相關的就都找出來了,新來的這個秘書是只找老板提示的信息匹配到的合同~查找匹配的方法就是isMatch,這個代碼就是這樣的,代碼的開發其實只要仔細分析就能夠映射到現實生活中的很多事務處理上面~因為代碼也是人設計的,邏輯總逃脫不了人處理事務的思維。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

孙吴县| 汨罗市| 志丹县| 汉源县| 廊坊市| 蒙自县| 璧山县| 上思县| 开封县| 高雄市| 乃东县| 安顺市| 昆山市| 铜川市| 含山县| 南乐县| 长顺县| 呼伦贝尔市| 仁化县| 宽甸| 平泉县| 班玛县| 巴林左旗| 荔浦县| 叙永县| 永兴县| 武胜县| 淮阳县| 邹平县| 仙游县| 平潭县| 得荣县| 霍邱县| 泽州县| 洛浦县| 六盘水市| 宜宾市| 陆川县| 松溪县| 双辽市| 札达县|