当前位置:贵波网 > 娱乐 > 正文

如何开发FineReport的自定义控件

2022-09-25 17

第一步:实例化一个注册控件的接口
给四个信息 我们的控件类,界面类,图标路径,控件类型名字
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打包成插件就可以了。
本周热门