JFreeChart 属性

上篇文章中我们学习了怎么样在swing框架下构建一个基本的时间序列图,这一节将学习如果设置JFreeChart的显示样式,本节实例运行效果图如下:

JFreeChart 属性_第1张图片

 

        本实例新增实现功能:

① 设置图表背景色、背景图片、网格线颜色等

        ② 设置序列线颜色、数据点外框是否画出,数据点是否填充,填充颜色等

 

       实现代码如下:

 

Java代码   收藏代码
  1. package lw.release.s1TimeSeries;  
  2.   
  3. import java.awt.Color;  
  4. import java.awt.Dimension;  
  5. import java.awt.Font;  
  6. import javax.swing.BorderFactory;  
  7. import javax.swing.JPanel;  
  8. import javax.swing.border.CompoundBorder;  
  9. import org.jfree.chart.ChartFactory;  
  10. import org.jfree.chart.ChartPanel;  
  11. import org.jfree.chart.JFreeChart;  
  12. import org.jfree.chart.StandardChartTheme;  
  13. import org.jfree.chart.labels.StandardXYSeriesLabelGenerator;  
  14. import org.jfree.chart.plot.PlotOrientation;  
  15. import org.jfree.chart.plot.XYPlot;  
  16. import org.jfree.chart.renderer.xy.XYItemRenderer;  
  17. import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;  
  18. import org.jfree.data.time.Month;  
  19. import org.jfree.data.time.TimeSeries;  
  20. import org.jfree.data.time.TimeSeriesCollection;  
  21. import org.jfree.data.xy.XYDataset;  
  22. import org.jfree.ui.ApplicationFrame;  
  23. import org.jfree.ui.RefineryUtilities;  
  24.   
  25. import lw.release.ChartBasePanel;  
  26.   
  27. /** 
  28.  * 时间序列图:设置图表显示属性 
  29.  *  
  30.  * 新增功能点: 
  31.  *   ① 设置图表背景色、背景图片、网格线颜色等 
  32.  *   ② 设置序列线颜色、数据点外框是否画出,数据点是否填充,填充颜色等 
  33.  *  
  34.  * @author 刘伟  2012-10-26 
  35.  *  
  36.  * 楼主辛勤整理,无私免费提供给大家观看,体惜楼主辛苦,转载时请注明出处:http://lw2078.iteye.com/  
  37.  * */  
  38. @SuppressWarnings("serial")  
  39. public class TimeSeries02 extends ApplicationFrame {  
  40.   
  41.     public TimeSeries02(String title) {  
  42.         super(title);  
  43.         setContentPane(new TimeSeriesPanel());  
  44.     }  
  45.   
  46.     public JPanel createDemoPanel() {  
  47.         return new TimeSeriesPanel();  
  48.     }  
  49.   
  50.     public static void main(String[] arg) {  
  51.         TimeSeries02 timeSeries = new TimeSeries02("设置图表显示属性");  
  52.         timeSeries.pack();  
  53.         RefineryUtilities.centerFrameOnScreen(timeSeries);  
  54.         timeSeries.setVisible(true);  
  55.     }  
  56.   
  57.     /** 
  58.      * 显示该Demo图表的容器 
  59.      *  
  60.      * ChartBasePanel类是Swing框架下所有例子共同使用的,这里不重复贴出 
  61.      * 这个类源码位置:http://lw2078.iteye.com/blog/1705637  
  62.      * */  
  63.     private class TimeSeriesPanel extends ChartBasePanel {  
  64.         private TimeSeries series[] = new TimeSeries[2];    // 间隔定长时间(如年、月、日、时、分、秒等)的数据序列  
  65.         private ChartPanel chartPanel;    
  66.         private JFreeChart chart = createChart();   // 创建一个JFreeChart时间序列图表  
  67.   
  68.         public TimeSeriesPanel() {  
  69.             super();  
  70.               
  71.             addChart(this.chart);   // 将此JFreeChart加入JFreeChart列表中  
  72.               
  73.             /* 将JFreeChart放在专用的图表容器ChartPanel中 */  
  74.             this.chartPanel = new ChartPanel(this.chart);  
  75.             this.chartPanel.setPreferredSize(new Dimension(600250));  
  76.               
  77.             // 设置chartPanel容器边框  
  78.             CompoundBorder compoundBorder = BorderFactory.createCompoundBorder(  
  79.                     BorderFactory.createEmptyBorder(44,44),  
  80.                     BorderFactory.createEtchedBorder());  
  81.             this.chartPanel.setBorder(compoundBorder);  
  82.               
  83.             // 将chartPanel加入到本容器中  
  84.             add(this.chartPanel);  
  85.         }  
  86.   
  87.         /** 
  88.          * 创建jfreechart图表 
  89.          * */  
  90.         private JFreeChart createChart() {  
  91.             // 生成图表数据集合  
  92.             XYDataset xyDataset = createDataset();   
  93.               
  94.             // 增加汉字支持  
  95.             StandardChartTheme standardChartTheme=new StandardChartTheme("CN");     //创建主题样式            
  96.             standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD,20));    //设置标题字体         
  97.             standardChartTheme.setRegularFont(new Font("SimSun",Font.PLAIN,15));    //设置图例的字体      
  98.             standardChartTheme.setLargeFont(new Font("宋体",Font.PLAIN,15));      //设置轴向的字体     
  99.             ChartFactory.setChartTheme(standardChartTheme); //应用主题样式      
  100.               
  101.             // 创建一个时间序列图表的JFreeChart  
  102.             JFreeChart jFreeChart = ChartFactory.createTimeSeriesChart(  
  103.                     "设置图表显示属性",     // 图表名  
  104.                     "时间",               // 横轴标签文字  
  105.                     "数值",               // 纵轴标签文字  
  106.                     xyDataset,          // 图表的数据集合  
  107.                     true,               // 是否显示图表中每条数据序列的说明  
  108.                     false,              // 是否显示工具提示  
  109.                     false);             // 是否显示图表中设置的url网络连接  
  110.               
  111. ///////////////////////////// 新功能点 ////////////////////////////////////////       
  112.               
  113.             // XYPlot图表区域的设置对象,用来设置图表的一些显示属性  
  114.             XYPlot xyPlot = (XYPlot) jFreeChart.getPlot();    
  115.             xyPlot.setBackgroundPaint(Color.PINK);          // 设置图表背景颜色  
  116.             xyPlot.setOrientation(PlotOrientation.VERTICAL);// 图表横向显示还是纵向显示  
  117.             xyPlot.setDomainGridlinePaint(Color.BLUE);  // 设置横向网格线蓝色  
  118.             xyPlot.setDomainGridlinesVisible(true);     // 设置显示横向网格线  
  119.             xyPlot.setRangeGridlinePaint(Color.BLUE);   // 设置纵向网格线蓝色  
  120.             xyPlot.setRangeGridlinesVisible(true);      // 设置显示纵向网格线  
  121.             // 设置背景图片  
  122.             //  xyPlot.setBackgroundPaint(null);  
  123.             //  xyPlot.setBackgroundImage(JFreeChart.INFO.getLogo());   // 传入一个Image对象即可  
  124.               
  125.             // XYPlot用XYItemRenderer来画图表中的每一个序列线和数据点  
  126.             // 可以用XYItemRenderer来控制图表中序列线和数据点的画法  
  127.             XYItemRenderer r = xyPlot.getRenderer();  
  128.             if (r instanceof XYLineAndShapeRenderer) {  
  129.                 XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;  
  130.                   
  131.                 // 数据点样式设置  
  132.                 renderer.setBaseShapesVisible(true);    // 数据点显示外框  
  133.                 renderer.setBaseShapesFilled(true);     // 数据点外框内是否填充  
  134.                 renderer.setSeriesFillPaint(0, Color.ORANGE);   // 第一条序列线上数据点外框内填充颜色为橘黄色  
  135.                 renderer.setSeriesFillPaint(1, Color.white);    // 第二条序列线上数据点外框内填充颜色为白色  
  136.                 renderer.setUseFillPaint(true); // 如果要在数据点外框内填充自定义的颜色,这个标志位必须为真  
  137.                  
  138.                 // 序列线样式设置  
  139.                 renderer.setSeriesPaint(0, Color.GREEN);  // 设置第一条序列线为绿色  
  140.                 renderer.setSeriesPaint(1, Color.YELLOW); // 设置第二条数据线为黄色  
  141.                 renderer.setLegendItemToolTipGenerator(new StandardXYSeriesLabelGenerator("Tooltip {0}"));// 鼠标移到序列线上提示信息为“Toolop + 序列线的名字”  
  142.             }  
  143.               
  144. //////////////////////////////////// ////////////////////////////////////////  
  145.               
  146.             return jFreeChart;  
  147.         }  
  148.   
  149.         /** 
  150.          * 创建jfreechart图表所用的数据集合 
  151.          *  
  152.          * @return 
  153.          */  
  154.         private XYDataset createDataset() {  
  155.   
  156.             // 生成数据序列1  
  157.             this.series[0] = new TimeSeries("序列1");   
  158.             series[0].add(new Month(22001), 181.8);  
  159.             series[0].add(new Month(32001), 167.3);  
  160.             series[0].add(new Month(42001), 153.8);  
  161.             series[0].add(new Month(52001), 167.6);  
  162.             series[0].add(new Month(62001), 158.8);  
  163.             series[0].add(new Month(72001), null);    // 没有数据不连续的情况,该时间点的数值应该设置为null  
  164.             series[0].add(new Month(82001), 153.9);  
  165.             series[0].add(new Month(92001), 142.7);  
  166.             series[0].add(new Month(102001), 123.2);  
  167.             series[0].add(new Month(112001), 131.8);  
  168.             series[0].add(new Month(122001), 139.6);  
  169.             series[0].add(new Month(12002), 142.9);  
  170.             series[0].add(new Month(22002), 138.7);  
  171.   
  172.               
  173.             // 生成数据序列2  
  174.             this.series[1] = new TimeSeries("序列2");  
  175.             series[1].add(new Month(22001), 129.6);  
  176.             series[1].add(new Month(32001), 123.2);  
  177.             series[1].add(new Month(42001), 117.2);  
  178.             series[1].add(new Month(52001), 124.1);  
  179.             series[1].add(new Month(62001), 122.6);  
  180.             series[1].add(new Month(72001), 119.2);  
  181.             series[1].add(new Month(82001), 116.5);  
  182.             series[1].add(new Month(92001), 112.7);  
  183.             series[1].add(new Month(102001), 101.5);  
  184.             series[1].add(new Month(112001), 106.1);  
  185.             series[1].add(new Month(122001), 110.3);  
  186.             series[1].add(new Month(12002), 111.7);  
  187.             series[1].add(new Month(22002), 111.0);  
  188.               
  189.             // 将两条数据序列都放在一个数据集合中  
  190.             TimeSeriesCollection dataset = new TimeSeriesCollection();  
  191.             dataset.addSeries(this.series[0]);    
  192.             dataset.addSeries(this.series[1]);    
  193.               
  194.             return dataset;  
  195.         }  
  196.     }  
  197.       
  198.       
  199. }  

你可能感兴趣的:(JFreeChart 属性)