JFreeChart来显示一个XML文件

前端之家收集整理的这篇文章主要介绍了JFreeChart来显示一个XML文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

通过JFreeChart来显示以下的XML文件

  1. <chart caption="Sales - 2012 v 2013" numberprefix="$" plotgradientcolor="" bgcolor="FFFFFF" showalternatehgridcolor="0" divlinecolor="CCCCCC" showvalues="0" showcanvasborder="0" canvasborderalpha="0" canvasbordercolor="CCCCCC" canvasborderthickness="1" yaxismaxvalue="30000" captionpadding="30" linethickness="3" yaxisvaluespadding="15" legendshadow="0" legendborderalpha="0" palettecolors="#f8bd19,#008ee4,#33bdda,#e44a00,#6baa01,#583e78" showborder="0">
  2. <categories>
  3. <category label="Jan" />
  4. <category label="Feb" />
  5. <category label="Mar" />
  6. <category label="Apr" />
  7. <category label="May" />
  8. <category label="Jun" />
  9. <category label="Jul" />
  10. <category label="Aug" />
  11. <category label="Sep" />
  12. <category label="Oct" />
  13. <category label="Nov" />
  14. <category label="Dec" />
  15. </categories>
  16. <dataset seriesname="2013">
  17. <set value="22400" />
  18. <set value="24800" />
  19. <set value="21800" />
  20. <set value="21800" />
  21. <set value="24600" />
  22. <set value="27600" />
  23. <set value="26800" />
  24. <set value="27700" />
  25. <set value="23700" />
  26. <set value="25900" />
  27. <set value="26800" />
  28. <set value="24800" />
  29. </dataset>
  30. <dataset seriesname="2012">
  31. <set value="10000" />
  32. <set value="11500" />
  33. <set value="12500" />
  34. <set value="15000" />
  35. <set value="16000" />
  36. <set value="17600" />
  37. <set value="18800" />
  38. <set value="19700" />
  39. <set value="21700" />
  40. <set value="21900" />
  41. <set value="22900" />
  42. <set value="20800" />
  43. </dataset>
  44. </chart>
实现代码如下:
  1. package com.oracle;
  2.  
  3. import java.awt.BasicStroke;
  4. import java.awt.Color;
  5. import java.awt.Dimension;
  6. import java.awt.Polygon;
  7. import java.awt.Shape;
  8. import java.awt.geom.Rectangle2D;
  9. import java.io.File;
  10. import java.io.IOException;
  11. import java.io.PrintWriter;
  12. import java.text.SimpleDateFormat;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15.  
  16. import org.dom4j.Document;
  17. import org.dom4j.DocumentException;
  18. import org.dom4j.Element;
  19. import org.dom4j.io.SAXReader;
  20. import org.jfree.chart.ChartFactory;
  21. import org.jfree.chart.ChartPanel;
  22. import org.jfree.chart.JFreeChart;
  23. import org.jfree.chart.axis.NumberAxis;
  24. import org.jfree.chart.plot.CategoryPlot;
  25. import org.jfree.chart.plot.DefaultDrawingSupplier;
  26. import org.jfree.chart.plot.DrawingSupplier;
  27. import org.jfree.chart.plot.PlotOrientation;
  28. import org.jfree.chart.renderer.category.LineAndShapeRenderer;
  29. import org.jfree.data.category.CategoryDataset;
  30. import org.jfree.data.category.DefaultCategoryDataset;
  31. import org.jfree.ui.ApplicationFrame;
  32. import org.jfree.ui.RefineryUtilities;
  33.  
  34. //参见http://xuehu2009.iteye.com/blog/480387
  35.  
  36. public class Test3 extends ApplicationFrame {
  37.  
  38. private static List<String> month = new ArrayList<String>();
  39. private static List<Integer> tongJi_2012 = new ArrayList<Integer>();
  40. private static List<Integer> tongJi_2013 = new ArrayList<Integer>();
  41.  
  42. /**
  43. * 画板的构造方法
  44. *
  45. * @param title
  46. */
  47. public Test3(final String title) {
  48. super(title);
  49. final CategoryDataset dataset = createDataset();
  50. final JFreeChart chart = createChart(dataset);
  51. final ChartPanel chartPanel = new ChartPanel(chart);
  52. chartPanel.setPreferredSize(new java.awt.Dimension(500,270));
  53. setContentPane(chartPanel);
  54.  
  55. }
  56.  
  57. /**
  58. * 新建一个数据集合
  59. *
  60. * @return 返回一个数据集合
  61. */
  62. private CategoryDataset createDataset() {
  63. readXML();
  64. DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
  65. DefaultCategoryDataset dataset = null;
  66. for (int i = 0; i < month.size(); i++) {
  67. // 用法参见:linedataset.addValue(value,rowKey,columnKey);
  68. linedataset.addValue(tongJi_2012.get(i),"2012",month.get(i));
  69. linedataset.addValue(tongJi_2013.get(i),"2013",month.get(i));
  70. linedataset.addValue(3000,"2014",month.get(i));
  71. linedataset.addValue(2000,"2015",month.get(i));
  72. }
  73. dataset = linedataset;
  74. return dataset;
  75. }
  76.  
  77. /**
  78. * 通过上面函数的得到的数据集合创建一个图表
  79. *
  80. * @param dataset
  81. * @return
  82. */
  83. private JFreeChart createChart(final CategoryDataset dataset) {
  84. final JFreeChart chart = ChartFactory.createLineChart(
  85. "JFreechart Test",// chart title
  86. "Type",// 横坐标意义
  87. "Value",// 纵坐标意义
  88. dataset,// 数据集合
  89. PlotOrientation.VERTICAL,// orientation
  90. true,// include legend
  91. true,// tooltips
  92. false // urls
  93. );
  94.  
  95. // final StandardLegend legend = (StandardLegend) chart.getLegend();
  96. // legend.setDisplaySeriesShapes(true);
  97.  
  98. final Shape[] shapes = new Shape[3];
  99. int[] xpoints;
  100. int[] ypoints;
  101.  
  102. // right-pointing triangle
  103. xpoints = new int[] { -3,3,-3 };
  104. ypoints = new int[] { -3,3 };
  105. shapes[0] = new Polygon(xpoints,ypoints,3);
  106.  
  107. // vertical rectangle
  108. shapes[1] = new Rectangle2D.Double(-2,-3,6);
  109.  
  110. // left-pointing triangle
  111. xpoints = new int[] { -3,3 };
  112. ypoints = new int[] { 0,3 };
  113. shapes[2] = new Polygon(xpoints,3);
  114.  
  115. final DrawingSupplier supplier = new DefaultDrawingSupplier(
  116. DefaultDrawingSupplier.DEFAULT_PAINT_SEQUENCE,DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE,DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE,DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE,shapes);
  117. final CategoryPlot plot = chart.getCategoryPlot();
  118. plot.setDrawingSupplier(supplier);
  119.  
  120. chart.setBackgroundPaint(Color.white);
  121.  
  122. // set the stroke for each series...
  123. // 设置每个线条的样式,本例中有4条线
  124. plot.getRenderer().setSeriesStroke(
  125. 0,new BasicStroke(2.0f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND,1.0f,new float[] { 10.0f,6.0f },// 虚线的横纵长度
  126. 0.0f));
  127. plot.getRenderer().setSeriesStroke(
  128. 1,new float[] { 6.0f,0.0f));
  129. plot.getRenderer().setSeriesStroke(
  130. 2,new float[] { 2.0f,0.0f));
  131.  
  132. plot.getRenderer().setSeriesStroke(
  133. 3,BasicStroke.CAP_SQUARE,0.0f));
  134.  
  135. // customise the renderer...
  136. final LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot
  137. .getRenderer();
  138. // renderer.setDrawShapes(true);
  139. renderer.setItemLabelsVisible(true);
  140. // renderer.setLabelGenerator(new StandardCategoryLabelGenerator());
  141.  
  142. // customise the range axis...
  143. final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
  144. rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
  145. rangeAxis.setAutoRangeIncludesZero(false);
  146. rangeAxis.setUpperMargin(0.12);
  147. return chart;
  148. }
  149.  
  150. /**
  151. * 读XML文件
  152. */
  153. public void readXML() {
  154. SAXReader saxReader = new SAXReader();
  155. try {
  156. Document doc = saxReader.read(new File("123.xml"));
  157. Element element = doc.getRootElement();
  158.  
  159. List list = element.elements();
  160. for (int i = 0; i < list.size(); i++) {
  161. Element elementz = (Element) list.get(i);
  162. List list1 = elementz.elements();
  163. if (elementz.getName().equals("categories")) {
  164. for (int j = 0; j < list1.size(); j++) {
  165. Element elementz2 = (Element) list1.get(j);
  166. month.add(elementz2.attributeValue("label"));
  167. }
  168. } else if (elementz.getName().equals("dataset")) {
  169. if (elementz.attributeValue("seriesname").equals("2013")) {
  170. for (int j = 0; j < list1.size(); j++) {
  171. Element elementz2 = (Element) list1.get(j);
  172. tongJi_2013.add(Integer.parseInt(elementz2
  173. .attributeValue("value")));
  174. }
  175. } else if (elementz.attributeValue("seriesname").equals(
  176. "2012")) {
  177. for (int j = 0; j < list1.size(); j++) {
  178. Element elementz2 = (Element) list1.get(j);
  179. tongJi_2012.add(Integer.parseInt(elementz2
  180. .attributeValue("value")));
  181. }
  182. }
  183. }
  184. }
  185. for (int i = 0; i < month.size(); i++) {
  186. System.out.print(month.get(i) + " ");
  187. System.out.print(tongJi_2012.get(i) + " ");
  188. System.out.println(tongJi_2013.get(i));
  189. }
  190. } catch (Exception e) {
  191. // TODO Auto-generated catch block
  192. e.printStackTrace();
  193. }
  194. }
  195.  
  196. public static void main(String[] args) {
  197. final Test3 demo = new Test3("JFreeChart Test");
  198. demo.pack();
  199. RefineryUtilities.centerFrameOnScreen(demo);
  200. demo.setVisible(true);
  201. }
  202.  
  203. }

结果如下图所示:

猜你在找的XML相关文章