Java軟件報(bào)表軟件技術(shù)博客

          java報(bào)表軟件技術(shù)匯總 java報(bào)表軟件制作 報(bào)表軟件新聞
          posts - 355, comments - 100, trackbacks - 0, articles - 3
             :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

          日歷

          <2016年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          Java友情博客鏈接

          搜索

          •  

          最新評論

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

          第一步:實(shí)例化一個(gè)注冊控件的接口

          給四個(gè)信息 我們的控件類,界面類,圖標(biāo)路徑,控件類型名字

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

              }


          }


           

          因?yàn)橐淖冞^濾方式,就要重寫一個(gè)過濾器

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

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

           

          代碼解釋

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

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

          因?yàn)檫@個(gè)例子中并沒有對前端有任何修改的要求~所以就沒做任何改動(dòng)~下面看后臺(tái)。

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

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

          我們這里控件ComboBox就是老板,ComboBoxDataFilter就是秘書,就是這么個(gè)意思,這里每個(gè)秘書肯定都有自己找合同的一套方法,以前那個(gè)秘書是只要有點(diǎn)相關(guān)的就都找出來了,新來的這個(gè)秘書是只找老板提示的信息匹配到的合同~查找匹配的方法就是isMatch,這個(gè)代碼就是這樣的,代碼的開發(fā)其實(shí)只要仔細(xì)分析就能夠映射到現(xiàn)實(shí)生活中的很多事務(wù)處理上面~因?yàn)榇a也是人設(shè)計(jì)的,邏輯總逃脫不了人處理事務(wù)的思維。



          主站蜘蛛池模板: 蚌埠市| 隆林| 皮山县| 泌阳县| 全南县| 巩留县| 抚宁县| 乾安县| 呼和浩特市| 东城区| 长汀县| 沅江市| 育儿| 县级市| 富源县| 砀山县| 萍乡市| 潮安县| 余干县| 延庆县| 仙居县| 鄂尔多斯市| 太谷县| 宁国市| 额尔古纳市| 绥芬河市| 托里县| 徐汇区| 加查县| 洪湖市| 五台县| 平阴县| 昆明市| 尉犁县| 亳州市| 兴山县| 商丘市| 犍为县| 砚山县| 治多县| 曲周县|