1. 描述
很多人不知道该如何在报表开发平台中集成第三方图表库,由此可能会影响实际的工作效率,根据自己平时的工作经验,在该文中详细讲解一下集成第三方图表库的步骤。这里以集成echarts为例看下在FineReport中集成第三方图表库的步骤。
2. 集成需要实现两个接口ChartTypeInterfaceProvider和ChartTypeProvider集成需要的两个接口
ChartTypeInterfaceProvider是设计里用到的界面,有两个界面是必要的,一个是类型选择的界面,一个是属性配置的界面。类型选择的界面代码如下。
1. package com.fr.plugin.chart;
2. import com.fr.chart.chartattr.Chart;
3. import com.fr.design.mainframe.chart.gui.type.UserDefinedChartTypePane;
4. /**
5. * Created by eason on 15/5/22.
6. */
7. public class CustomBarTypePane extends UserDefinedChartTypePane {
8. //弹出框的标题
9. public String title4PopupWindow(){
10. return "自定义柱形图";
11. }
12. //该种图表类型的标识符,需要让界面和后面定义的类型关联起来
13. protected String getCustomChartID(){
14. return "自定义柱形图";
15. }
16. public void updateBean(Chart chart) {
17. if(chart != null){
18. chart.setPlot(null);
19. }
20. }
21. }
属性配置的界面代码如下,这里我们采用简单的实现方式,把所有的属性都写到了一个TextField里,如果想要实现别的更复杂的配置界面,可以参考echarts的文档来设计界面。
1. package com.fr.plugin.chart; /**
2. * Created by eason on 15/5/22.
3. */
4. import com.fr.chart.chartattr.ChartCollection;
5. import com.fr.chart.chartattr.Chart;
6. import com.fr.design.gui.itextfield.UITextField;
7. import com.fr.design.mainframe.chart.AbstractChartAttrPane;
8. import com.fr.general.FRLogger;
9. import com.fr.json.JSONException;
10. import com.fr.json.JSONObject;
11. import javax.swing.*;
12. import java.awt.*;
13. public class CustomBarAttrPane extends AbstractChartAttrPane{
14. private UITextField textField;
15. public CustomBarAttrPane(){
16. this.initAll();
17. this.initAllListeners();
18. }
19. public void populate(ChartCollection collection){
20. if(collection != null && collection.getSelectedChart() != null){
21. Chart chart = collection.getSelectedChart();
22. try{
23. textField.setText(chart.getConfig("allOptions").toString());
24. }catch (JSONException ex){
25. FRLogger.getLogger().error(ex.getMessage());
26. }
27. }
28. }
29. public void update(ChartCollection collection) {
30. if(collection != null && collection.getSelectedChart() != null){
31. Chart chart = collection.getSelectedChart();
32. try{
33. chart.addConfig("allOptions", new JSONObject(textField.getText()));
34. }catch (JSONException ex){
35. FRLogger.getLogger().error(ex.getMessage());
36. }
37. }
38. }
39. public String getIconPath() {
40. return "com/fr/design/images/chart/InterAttr.png";
41. }
42. protected JPanel createContentPane() {
43. JPanel pane = new JPanel(new BorderLayout());
44. textField = new UITextField();
45. pane.add(textField, BorderLayout.CENTER);
46. return pane;
47. }
48. /**
49. * 弹出界面的标题
50. * @return 弹出界面的标题
51. */
52. public String title4PopupWindow(){
53. return "标题";
54. }
55. }
最终我们界面的接口定义可以写成如下, isUseDefaultPane方法都return false就可以了。
1. package com.fr.plugin.chart; /**
2. * Created by eason on 15/5/22.
3. */
4. import com.fr.design.chart.fun.impl.AbstractChartTypeInterface;
5. import com.fr.design.gui.frpane.AttributeChangeListener;
6. import com.fr.design.mainframe.chart.AbstractChartAttrPane;
7. import com.fr.design.mainframe.chart.gui.type.AbstractChartTypePane;
8. public class CustomBarChartInterface extends AbstractChartTypeInterface {
9. public static final String XML_TAG = "ChartTypeInterfaceProvider";
10. public AbstractChartTypePane getPlotTypePane(){
11. return new CustomBarTypePane();
12. }
13. public AbstractChartAttrPane[] getAttrPaneArray(AttributeChangeListener listener){
14. return new AbstractChartAttrPane[]{new CustomBarAttrPane()};
15. }
16. public boolean isUseDefaultPane(){
17. return false;
18. }
19. public String getIconPath(){
20. return "com/fr/plugin/chart/images/echarts.png";
21. }
22. }
3. 实现类型的接口
1. package com.fr.plugin.chart; /**
2. * Created by eason on 15/5/22.
3. */
4. import com.fr.chart.chartattr.Chart;
5. import com.fr.chart.fun.impl.AbstractChartTypeProvider;
6. public class CustomBarChartType extends AbstractChartTypeProvider {
7. public String getChartName(){
8. return "echarts";
9. }
10. public String getChartUseName(){
11. return "echarts柱形图";
12. }
13. public Chart[] getChartTypes(){
14. Chart[] charts = new Chart[1];
15. Chart barChart = new Chart();
16. barChart.setWrapperName(getWrapperName());
17. barChart.setCustomChartID("自定义柱形图");
18. charts[0] = barChart;
19. barChart.setRequiredJs(getRequiredJS());
20. barChart.setChartImagePath(this.getChartImagePath());
21. return charts;
22. }
23. public String[] getRequiredJS(){
24. return new String[]{
25. "/com/fr/web/core/js/echarts-all.js",
26. "/com/fr/web/core/js/EchartsWrapper.js"
27. };
28. }
29. @Override
30. public String getChartImagePath() {
31. return "com/fr/plugin/chart/images/echarts_display.png";
32. }
33. public String getWrapperName(){
34. return "EchartsWrapper";
35. }
36. }
这里需要注意的是setCustomChartID方法需要和前面界面中的名字一致, setWrapperName是EchartsWrapper.js定义的function的名字。EchartsWrapper.js的内容如下:
1. /**
2. * Created by eason on 15/5/21.
3. */
4. EchartsWrapper = function(options, dom){
5. var myChart = echarts.init(dom[0]);
6. myChart.setOption(options.jsonOptions.allOptions);
7. }
相关推荐
在实际开发中,你可能还需要学习如何集成第三方报表库,如水晶报表(Crystal Reports),以获取更高级的功能和灵活性。不过,纯MFC的解决方案也能满足许多基本的报表需求,并提供良好的性能和定制能力。文件...
在提供的压缩包文件"VCL第三方控件"中,很可能包含了适用于VCL框架的各种第三方控件,这些控件可能是为了增强界面美观性、提高开发效率或实现特定功能而设计的。开发者可以通过这些控件快速构建功能丰富且具有吸引力...
4. **如何集成第三方控件** 集成第三方控件通常涉及以下步骤: - 下载并安装控件库。 - 在项目中添加引用,这可以通过解决方案资源管理器中的“添加引用”对话框完成。 - 将控件拖放到设计视图中,或者通过代码...
通过集成第三方控件,开发者可以实现复杂的业务逻辑,如数据分析、数据可视化、打印预览等,而无需从零开始编写大量代码。此外,许多控件还支持多种语言,增强了应用的国际化能力。 “标签”中的“第三方控件”...
在Java开发领域,尤其是SSM(Spring、SpringMVC、MyBatis)和Spring Boot框架中,集成第三方库是常见的需求。本项目整合了润乾报表的常用jar包,为开发者提供了一个便捷的方式来实现数据展示和分析功能。润乾报表是...
本话题主要探讨C#中常用的第三方报表控件及其特点。 首先,C#报表的第三方控件通常提供拖放式设计界面,允许开发者通过直观的方式创建复杂的报表布局。这些控件通常支持多种数据源,包括数据库、XML、JSON等,可以...
在开发过程中,为了增强程序的功能性和美观性,常常会借助第三方控件。这些控件不仅扩展了VB的基础功能,还提供了许多高级特性,如图表绘制、数据库操作、网络通信等。 PDG格式的文件通常是指超星阅读器(PdgReader...
本篇文章将深入探讨WinForm程序中第三方控件的应用、优势以及常见的第三方控件库。 一、第三方控件的优势 1. 功能扩展:第三方控件通常包含更多的功能,例如图表绘制、数据可视化、富文本编辑、高级表格处理等,...
例如,一些常见的第三方控件可能包括图表控件、报表控件、日历控件、树形视图控件、数据网格控件等,它们能帮助开发者快速构建交互式和视觉吸引力强的界面。 在"asp.net第三方控件.rar"这个压缩包中,可能包含了一...
Maximo还支持集成第三方报表工具,如Cognos或Crystal Reports,以扩展其报表能力。这些工具通常提供更复杂的数据处理和高级图表功能,适合需要高级分析的企业。在集成过程中,理解Maximo的数据模型和接口规范是至关...
- **Crk Report企业版客户端**:提供报表设计、打印预览、打印功能,并通过API接口与第三方应用集成,支持报表发布到Crk Report Server。 - **Web Crk Report企业版ActiveX控件**:用于网页环境,支持打印预览和...
第三方组件则存放在\jasperreports-3.5.2\lib\目录,其中,“commons-”前缀的jar包为必需项,其他则根据实际功能需求选择性引入。 #### 三、JasperReport与iReport入门篇 ##### 3.1 iReport入门 iReport提供了...
- **第四方支付**:又称为聚合支付,是指在第三方支付的基础上,通过集成多种支付接口,为商户提供统一的支付解决方案。它不直接处理资金,而是作为一个接口服务商,帮助商户对接多个第三方支付平台。 ##### 2. PHP...
标题"delphi第三方控件"和描述"有用的第三方控件5665365585655"都暗示了这个主题是关于利用外部组件增强Delphi应用程序开发的。 Delphi本身拥有丰富的VCL(Visual Component Library)组件库,但有时开发者可能需要...
在Android中,开发者通常会使用自定义View或者第三方库来实现这样的图表。自定义View允许程序员从头构建图形,而第三方库如MPAndroidChart、AChartEngine等提供了更丰富的功能和预设样式,能快速集成到项目中。 ...
标题“C#.NET第三方控件”指的是在C#编程环境中使用的非官方、由第三方公司或个人开发的控件库。 第三方控件的优势在于它们可以提供原生.NET Framework控件所不具备的特性。例如,更精致的界面设计,更强大的数据...
总之,对于Winform开发中的报表设计,采用第三方的专业工具是一种常见的解决方案,它们能帮助开发者创建出既实用又美观的报表,提升应用的专业形象,从而更好地服务业务需求。而"FrNet_2017.1.16"这样的报表设计软件...
在安卓图表库的选择上,除了自定义绘图外,还有一些流行的第三方库可以帮助我们轻松实现折线图,例如MPAndroidChart、AchartEngine和AndroidPlot。这些库提供了丰富的配置选项和良好的性能,能快速地集成到项目中。...