最具影响力的数字化技术在线社区

168大数据

 找回密码
 立即注册

QQ登录

只需一步,快速开始

1 2 3 4 5
打印 上一主题 下一主题
开启左侧

在报表开发平台中集成第三方图表库

[复制链接]
跳转到指定楼层
楼主
发表于 2015-11-16 15:11:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多数据大咖,获取更多知识干货,轻松玩转大数据

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

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. }  




楼主热帖
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 赞 踩

168大数据 - 论坛版权1.本主题所有言论和图片纯属网友个人见解,与本站立场无关
2.本站所有主题由网友自行投稿发布。若为首发或独家,该帖子作者与168大数据享有帖子相关版权。
3.其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和168大数据的同意,并添加本文出处。
4.本站所收集的部分公开资料来源于网络,转载目的在于传递价值及用于交流学习,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
5.任何通过此网页连接而得到的资讯、产品及服务,本站概不负责,亦不负任何法律责任。
6.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源,若标注有误或遗漏而侵犯到任何版权问题,请尽快告知,本站将及时删除。
7.168大数据管理员和版主有权不事先通知发贴者而删除本文。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

关于我们|小黑屋|Archiver|168大数据 ( 京ICP备14035423号|申请友情链接

GMT+8, 2024-5-3 22:03

Powered by BI168大数据社区

© 2012-2014 168大数据

快速回复 返回顶部 返回列表