自定义控件开发手记

ONE_DATA 2015-09-09 03:37:29
finereport8.0开始提供接口了,最近在学习插件开发知识,有谁一起来学习交流下啊??

自定义控件开发手记(图文版请见http://dwz.cn/1G1SPZ)

源码:https://coding.net/u/finereport/p/plugins/git/tree/master/plugin-paragrid

第一步,建立插件源码文件夹


2.用IDEA创建这个工程,如图所示的结构


3.放入插件开发所需的jar包


4.查找到自定义控件所需的几个接口
控件接口:其中b和c都是继a接口的
接口 描述 编号
com.fr.design.fun.ParameterWidgetOptionProvider 参数界面控件接口 a
com.fr.design.fun.CellWidgetOptionProvider 单元格控件接口 b
com.fr.design.fun.FormWidgetOptionProvider 表单控件接口 c
com.fr.stable.fun.JavaScriptFileHandler 用于引入js文件的接口 d
com.fr.stable.fun.CssFileHandler 用于引入css文件的接口 e
5.开始建立源文件目录,这个例子的package目录为com.fr.plugin.widget.grid


6.建立单元格控件接口的一个实现类com.fr.plugin.widget.grid.CellGridImpl
package com.fr.plugin.widget.grid;

import com.fr.design.beans.BasicBeanPane;
import com.fr.design.fun.impl.AbstractCellWidgetOptionProvider;
import com.fr.form.ui.Widget;

public class CellGridImpl extends AbstractCellWidgetOptionProvider {

@Override
public Class<? extends Widget> classForWidget() {
return null;
}

@Override
public Class<? extends BasicBeanPane<? extends Widget>> appearanceForWidget() {
return null;
}

@Override
public String iconPathForWidget() {
return null;
}

@Override
public String nameForWidget() {
return null;
}
}
7.一个个补充上这个方法的实现,其中的ComboGrid是控件的实现类,CellGridDefinePane是单元格控件的属性设置界面类

package com.fr.plugin.widget.grid;

import com.fr.design.beans.BasicBeanPane;
import com.fr.design.fun.CellWidgetOptionProvider;
import com.fr.form.ui.Widget;

public class CellGridImpl implements CellWidgetOptionProvider {

@Override
public Class<? extends Widget> classForWidget() {
return ComboGrid.class;
}

@Override
public Class<? extends BasicBeanPane<? extends Widget>> appearanceForWidget() {
return CellGridDefinePane.class;
}

@Override
public String iconPathForWidget() {
return "/com/fr/plugin/widget/grid/images/table.png";
}

@Override
public String nameForWidget() {
return "下拉表格";
}
}
8.在plugin.xml中注册上单元格控件接口

<extra-designer>
<CellWidgetOptionProvider class="com.fr.plugin.widget.grid.CellGridImpl"/>
</extra-designer>
9.web端展现,我们使用easyui。引入js和css代码接口实现如下

package com.fr.plugin.widget.grid;

import com.fr.stable.fun.impl.AbstractJavaScriptFileHandler;

public class JavaScriptFile extends AbstractJavaScriptFileHandler {

@Override
public String[] pathsForFiles() {
return new String[]{
"/com/fr/plugin/widget/grid/easyui/jquery.easyui.min.js",
"/com/fr/plugin/widget/grid/web/combogrid.js"
};
}
}
package com.fr.plugin.widget.grid;

import com.fr.stable.fun.impl.AbstractCssFileHandler;

public class CssFile extends AbstractCssFileHandler {

@Override
public String[] pathsForFiles() {
return new String[]{
"/com/fr/plugin/widget/grid/easyui/easyui.css",
"/com/fr/plugin/widget/grid/easyui/icon.css",
};
}
}
在plugin.xml注册上web文件引用接口
<extra-core>
<JavaScriptFileHandler class="com.fr.plugin.widget.grid.JavaScriptFile"/>
<CssFileHandler class="com.fr.plugin.widget.grid.CssFile"/>
</extra-core>
11.到这里,把该插件打成jar包并安装,就可以在单元格的控件一栏中看到“下拉表格控件了”
12.为了在参数界面和表单中也要能看到该控件,我们需要额外再写一个实现接口的类,这里不妨写为com.fr.plugin.widget.grid.GridImpl

package com.fr.plugin.widget.grid;

import com.fr.design.fun.ParameterWidgetOptionProvider;
import com.fr.design.fun.impl.AbstractFormWidgetOptionProvider;
import com.fr.form.ui.Widget;

public class GridImpl extends AbstractFormWidgetOptionProvider implements ParameterWidgetOptionProvider {
@Override
public Class<? extends Widget> classForWidget() {
return ComboGrid.class;
}

@Override
public Class<?> appearanceForWidget() {
return XComboGrid.class;
}

@Override
public String iconPathForWidget() {
return "/com/fr/plugin/widget/grid/images/table.png";
}

@Override
public String nameForWidget() {
return "下拉表格";
}
}
参数界面(表单)控件与单元格控件实现不同的地方,就在于public Class<?> appearanceForWidget()这个方法,因为我们可以看到所有的控件,在参数界面和表单中的属性设置是一样的,而在单元格控件中时设置属性是另外一个界面

在做好了之后,继续在plugin.xml中注册参数界面和表单控件接口,结合着之前添加的单元格控件接口,如下
<extra-designer>
<ParameterWidgetOptionProvider class="com.fr.plugin.widget.grid.GridImpl"/>
<FormWidgetOptionProvider class="com.fr.plugin.widget.grid.GridImpl"/>
<CellWidgetOptionProvider class="com.fr.plugin.widget.grid.CellGridImpl"/>
</extra-designer>
经过前面13步之后,整个手记就结束了。

开发要点
1.单元格控件的设置界面类需要继承BasicBeanPane并且需要实现DicPaneAndTreePaneCreator接口
2.表单和参数控件设置界面类需要继承XWidgetCreator类,这里由于和下拉框比较相似,所以继承了XWidgetCreator的子类XWriteAbleRepeatEditor
3.表单和参数控件属性编辑器,分为基本类型(数字、布尔值、字符串)和自定义类型(其他),基本类型是会自定调用系统内置的编辑器,自定义类型则需要继承AbstractPropertyEditor类
4.ComboGrid类public String getXType()方法的返回值要和combogrid.js中注册JS对象的值一致:$.shortcut('combogrid', FR.ComboGrid);
5.控件在web端展现的基本JS结构如下

(function($){
FR.MyImpl = FR.extend(FR.Widget, {
_defaultConfig: function () {
return $.extend(FR.Widget.superclass._defaultConfig.apply(), {
width : 120,
height : 24
});
},
_init: function () {
FR.Widget.superclass._init.apply(this, arguments);
},
getValue : function() {

},
setValue : function(v) {

}
});
})(jQuery);
...全文
237 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不错不错,值得鼓励
内容概要:本文系统研究了开关频率大于谐振频率(fs>fr)工况下,移相混合控制LLC谐振变换器在低压增益区域的工作特性,深入分析其在变频与移相结合控制模式下的调制机理、工作模态划分及损耗分布规律。通过Simulink平台构建高保真仿真模型,对变换器在不同负载和输入条件下的电压增益、转换效率、关键器件电压电流应力等性能指标进行了全面仿真验证,重点探讨了其在低增益区间的软开关实现能力与效率优化潜力,旨在提升LLC变换器在宽范围输入输出应用中的动态响应与能源转换效率。; 适合人群:从事电力电子变换器设计、高频电源开发及相关领域的高校研究生、科研院所研究人员及企业研发工程师,要求具备扎实的电路理论基础、电力电子技术知识以及一定的Simulink仿真能力。; 使用场景及目标:①深入理解LLC谐振变换器在fs>fr条件下采用移相混合控制的内在工作机理与模态转换过程;②掌握利用Simulink搭建复杂谐振变换器精确仿真模型的方法与技巧;③分析并优化低压增益区的增益特性与损耗构成,为设计高效率、高功率密度的软开关电源提供理论依据和数据支持; 阅读建议:建议读者结合文中所述仿真模型,亲自复现仿真过程,重点观察不同控制参数(如移相比、开关频率)对电压增益曲线和关键波形的影响,并对比传统变频控制策略,深入探究混合控制在拓宽调压范围、提升轻载效率方面的优势,从而深化对现代高效谐振电源设计的理解。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化问题;②掌握双层优化建模方法与粒子群算法在复杂电力系统问题中的应用技巧;③为实际工程中分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。

81,111

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧