要求:運用開源的JFreeChart生成一個柱形圖。
新建一個project,將JFreeChar的jar包導入到該project,然後新建一個SalesCountServlet .java
代碼如下:
- package com.dr.demo;
- import java.awt.Color;
- import java.awt.Font;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import org.jfree.chart.ChartFactory;
- import org.jfree.chart.ChartUtilities;
- import org.jfree.chart.JFreeChart;
- import org.jfree.chart.axis.CategoryAxis;
- import org.jfree.chart.axis.CategoryLabelPositions;
- import org.jfree.chart.axis.ValueAxis;
- import org.jfree.chart.plot.CategoryPlot;
- import org.jfree.chart.plot.PlotOrientation;
- import org.jfree.chart.title.TextTitle;
- import org.jfree.data.category.CategoryDataset;
- import org.jfree.data.category.DefaultCategoryDataset;
- public class SalesCountServlet {
- protected static void doGet() {
- System.out.println("圖表已經建立!");
- CategoryDataset dataset = getDataSet();
- String fileName = "SalesCount.jpg";//文件名稱
- JFreeChart chart = ChartFactory.createBarChart3D("產品銷量圖", // 圖表標題
- "產品", // 目錄軸的顯示標籤
- "銷量", // 數值軸的顯示標籤
- dataset, // 數據集
- PlotOrientation.VERTICAL, // 圖表方向:水平、垂直
- true, // 是否顯示圖例(對於簡單的柱狀圖必須是false)
- false, // 是否生成工具
- false // 是否生成URL鏈接
- );
- configFont(chart);//設置中文格式
- FileOutputStream fos_jpg = null;
- try {
- String statImagePath = "d:";//存放圖表的路徑
- try {
- fos_jpg = new FileOutputStream(statImagePath+ fileName);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- try {
- ChartUtilities.writeChartAsJPEG(fos_jpg, 0.5f, chart, 400, 300,null);
- } catch (IOException e) {
- e.printStackTrace();
- }
- } finally {
- try {
- fos_jpg.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- public static void configFont(JFreeChart chart){
- // 配置字體
- Font xfont = new Font("宋體",Font.PLAIN,12) ;// X軸
- Font yfont = new Font("宋體",Font.PLAIN,12) ;// Y軸
- Font kfont = new Font("宋體",Font.PLAIN,12) ;// 底部
- Font titleFont = new Font("隸書", Font.BOLD , 25) ; // 圖片標題
- CategoryPlot plot = chart.getCategoryPlot();// 圖形的繪製結構對象
- // 圖片標題
- chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont));
- // 底部
- chart.getLegend().setItemFont(kfont);
- // X 軸
- CategoryAxis domainAxis = plot.getDomainAxis();
- domainAxis.setLabelFont(xfont);// 軸標題
- domainAxis.setTickLabelFont(xfont);// 軸數值
- domainAxis.setTickLabelPaint(Color.BLUE) ; // 字體顏色
- domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 橫軸上的label斜顯示
- // Y 軸
- ValueAxis rangeAxis = plot.getRangeAxis();
- rangeAxis.setLabelFont(yfont);
- rangeAxis.setLabelPaint(Color.BLUE) ; // 字體顏色
- rangeAxis.setTickLabelFont(yfont);
- }
- private static CategoryDataset getDataSet() {
- DefaultCategoryDataset dataset = new DefaultCategoryDataset();
- dataset.addValue(20, "銷售圖表", "蘋果");
- dataset.addValue(20, "銷售圖表", "梨");
- dataset.addValue(30, "銷售圖表", "香蕉");
- dataset.addValue(40, "銷售圖表", "葡萄");
- dataset.addValue(50, "銷售圖表", "桔子");
- return dataset;
- }
- public static void main(String args[]){
- doGet();
- }
- }
運行程序後就會在d盤根目錄下找到一個SalesCount.jpg的文件,打開顯示結果如下:
希望各位大蝦不吝賜教!