因为项目需要所以开始搞Java和JFreeChart类库…真蛋疼,看了51cto的该类库专题:http://developer.51cto.com/art/201112/309201.htm,这是最基本的,不懂JFreeChart的朋友请先移步此处。

很不错,讲得比较清楚,只是和官方发布的demo有些重合了吧,都是pieChart,敢换一个别的图吗?

下面我把画图所必须的三个模块列出来,其他的部分就不一一提供了,有需要的可以看看:

 
  
  1. //加载dataset,具体的业务逻辑可以不用理会 
  2. public static XYDataset createxydataset(ArrayList<LineInfo> xydatalist, ArrayListMultimap<Integer, Integer> tabBat) { 
  3.     DefaultXYDataset  dataset = new DefaultXYDataset(); 
  4.     LineInfo tabTmp = xydatalist.get(0); 
  5.     int numTmp = tabTmp.getMeterNum(); 
  6.     Set<Integer> allKey = tabBat.keySet(); 
  7.     Iterator<Integer> it = allKey.iterator(); 
  8.     int keyTmp = 0
  9.     while(it.hasNext()) 
  10.     { 
  11.         keyTmp = it.next(); 
  12.         if(tabBat.containsEntry(keyTmp, numTmp)) 
  13.             break
  14.     } 
  15.     List<Integer> allNum = tabBat.get(keyTmp); 
  16.     int allNumSize = allNum.size(); 
  17. //data是数据的核心
  18.     double[][] data = new double[2][allNumSize]; 
  19.     it = allNum.iterator(); 
  20.     Iterator<LineInfo> it2 = xydatalist.iterator(); 
  21.     int tmp = 0, count = 0
  22.     LineInfo lineTmp = new LineInfo(); 
  23.     while(it.hasNext()) 
  24.     { 
  25.         tmp = it.next(); 
  26.         it2 = xydatalist.iterator(); 
  27.         while(it2.hasNext())  
  28.         { 
  29.             lineTmp = it2.next(); 
  30.             if(tmp == lineTmp.getMeterNum()) 
  31.                 break
  32.         } 
  33.         data[0][count] = lineTmp.getIntercept(); 
  34.         data[1][count] = lineTmp.getSlope(); 
  35.         count++; 
  36.     } 
  37. //addSeries里的第一个参数我还不太懂,从生成的图表看,就是图表下的说明文字而已
  38.     dataset.addSeries("table", data); 
  39.     return dataset; 
  40.  
  41. //生成图表对象 
  42. public static JFreeChart createChart(XYDataset xydataset, String title, String xAxis, String yAxis) { 
  43.     JFreeChart scatterChart = ChartFactory.createScatterPlot(title, xAxis, yAxis, xydataset, PlotOrientation.VERTICAL, truefalsefalse);  
  44.     return scatterChart; 
  45.  
  46. //根据图表对象,设置图像参数并画图,这里很重要,稍不注意,图里的文字就全是乱码了
  47. public static void drawScatterChart(JFreeChart scatterChart, String title, String noDataMsg) { 
  48.     //title, legend, plot 三个部分设置字体的方法分别如下:   
  49.        TextTitle textTitle = scatterChart.getTitle();   
  50.        textTitle.setFont(new Font("宋体", Font.BOLD, 20));   
  51.        LegendTitle legend = scatterChart.getLegend();   
  52.        if (legend != null
  53.        {   
  54.            legend.setItemFont(new Font("宋体", Font.BOLD, 20)); 
  55.        } 
  56.        XYPlot scatterPlot = scatterChart.getXYPlot();   
  57.        scatterPlot.setNoDataMessage(noDataMsg);
  58. //以下三行是画图
  59.     ChartFrame scatterFrame = new ChartFrame(title,scatterChart);   
  60.     scatterFrame.pack();  
  61.     scatterFrame.setVisible(true);  

总的来说,还是蛮简单的,要画其他的图去查一下API就可以了。