Java使用JFreeChart绘制柱形图(二)

2012-03-30 18:47:46|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:Java, Swing, 界面设计|来源:唯设编程网

FreeChart截止2011年2月22日为止的相当不错的java图形解决方案,基本能够解决目前的图形方面的需求。Java使用JFreeChart绘制柱形图介绍了使用JFreeChart绘制柱形图的方法,本文将介绍JFreeChart绘制另一种样式的柱形图,方法与Java使用JFreeChart绘制柱形图类似。首先给出程序的运行效果:

JFreeChart绘制柱状图

Java代码:

package Test.JFreeChar;
import java.awt.Component;
import java.awt.Font;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JFrame;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.StandardChartTheme;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
    
//JFreeChart Bar Chart(柱状图)     
public class CreateJFreeChartBar extends JFrame{     
    private static final long serialVersionUID = 1L;

    CreateJFreeChartBar(){
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("简单柱状图");
        this.add(CreateMainPanel());
        this.pack();
        this.setVisible(true);
    }
    private Component CreateMainPanel() {
        CategoryDataset dataset = createDataset();
        JFreeChart chart=createChart(dataset);
        return new ChartPanel(chart);
    }
    /**   
     * 创建JFreeChart Bar Chart(柱状图)   
     */    
    public static void main(String[] args) {     
        //步骤1:创建CategoryDataset对象(准备数据)     
        CategoryDataset dataset = createDataset();     
        //步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置     
        JFreeChart freeChart = createChart(dataset);     
        //步骤3:将JFreeChart对象输出到文件,Servlet输出流等     
        saveAsFile(freeChart, "c:jfreechartar.png", 500, 400);     
        new CreateJFreeChartBar();
    }     
         
    //保存为文件     
    public static void saveAsFile(JFreeChart chart, String outputPath, int weight, int height) {     
        FileOutputStream out = null;     
        try {     
            File outFile = new File(outputPath);     
            if (!outFile.getParentFile().exists()) {     
                outFile.getParentFile().mkdirs();     
            }     
            out = new FileOutputStream(outputPath);     
            //保存为PNG文件     
            ChartUtilities.writeChartAsPNG(out, chart, 300, 200);     
            //保存为JPEG文件     
            //ChartUtilities.writeChartAsJPEG(out, chart, 500, 400);     
            out.flush();     
        } catch (FileNotFoundException e) {     
            e.printStackTrace();     
        } catch (IOException e) {     
            e.printStackTrace();     
        } finally {     
            if (out != null) {     
                try {     
                    out.close();     
                } catch (IOException e) {     
                    //do nothing     
                }     
            }     
        }     
    }     
    
    //根据CategoryDataset生成JFreeChart对象     
    public static JFreeChart createChart(CategoryDataset categoryDataset) {     
        //这里的"name"参数;是什么意思我也不知道,反正这样可以用
        StandardChartTheme standardChartTheme = new StandardChartTheme("name");
        //可以改变轴向的字体
        standardChartTheme.setLargeFont(new Font("楷体",Font.BOLD, 12));
        //可以改变图例的字体
        standardChartTheme.setRegularFont(new Font("宋体",Font.BOLD, 8));
        //可以改变图标的标题字体
        standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD, 20));
        ChartFactory.setChartTheme(standardChartTheme);//设置主题
        JFreeChart jfreechart = ChartFactory.createBarChart("Bar Chart Demo",    //标题     
                "产品",    //categoryAxisLabel (category轴,横轴,X轴的标签)     
                "数量",    //valueAxisLabel(value轴,纵轴,Y轴的标签)     
                categoryDataset, // dataset     
                PlotOrientation.VERTICAL,     
                true, // legend     
                false, // tooltips     
                false); // URLs     
             
        //以下的设置可以由用户定制,也可以省略     
        CategoryPlot  plot = (CategoryPlot) jfreechart.getPlot();     
        //背景色 透明度     
        plot.setBackgroundAlpha(0.5f);     
        //前景色 透明度     
        plot.setForegroundAlpha(0.5f);     
        //其它设置可以参考 CategoryPlot     
        return jfreechart;     
    }     
    
    /**   
     * 创建CategoryDataset对象   
     *    
     */    
    public static CategoryDataset createDataset() {     
             
        String []rowKeys = {"One", "Two", "Three"};     
        String []colKeys = {"1987", "1997", "2007"};     
             
        double [][] data = {     
                {50, 20, 30},     
                {20, 10D, 40D},     
                {40, 30.0008D, 38.24D},     
        };     
             
        //也可以使用以下代码     
        //DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();     
        //categoryDataset.addValue(10, "rowKey", "colKey");     
             
        return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data);             
    }     
    
} 

至此,JFreeChart绘制柱状图的实例便完成了,在使用时,提醒读者需要注意的是下面这段代码:

    //根据CategoryDataset生成JFreeChart对象     
    public static JFreeChart createChart(CategoryDataset categoryDataset) {     
        //这里的"name"参数;是什么意思我也不知道,反正这样可以用
        StandardChartTheme standardChartTheme = new StandardChartTheme("name");
        //可以改变轴向的字体
        standardChartTheme.setLargeFont(new Font("楷体",Font.BOLD, 12));
        //可以改变图例的字体
        standardChartTheme.setRegularFont(new Font("宋体",Font.BOLD, 8));
        //可以改变图标的标题字体
        standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD, 20));
        ChartFactory.setChartTheme(standardChartTheme);//设置主题
        ......

这段代码主要目的是对统计图表进行自体相关的设置,如果你图表中包含中文而又忘记了进行这些设置,那么你的中文也许无法显示哦。

发表评论0条 】
网友评论(共?条评论)..
Java使用JFreeChart绘制柱形图(二)