文档库 最新最全的文档下载
当前位置:文档库 › JFreeChart应用2

JFreeChart应用2

JFreeChart应用2
JFreeChart应用2

JFreeChart应用2

1.servlet

packagecom.logcd.servlet;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.GradientPaint;

importjava.awt.RenderingHints;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.ServletRequest;

importjavax.servlet.ServletResponse;

importjavax.servlet.http.HttpServlet;

importorg.jfree.chart.ChartFactory;

importorg.jfree.chart.ChartUtilities;

importorg.jfree.chart.JFreeChart;

importorg.jfree.chart.axis.CategoryAxis;

importorg.jfree.chart.axis.ValueAxis;

https://www.wendangku.net/doc/2211829951.html,bels.ItemLabelAnchor;

https://www.wendangku.net/doc/2211829951.html,bels.ItemLabelPosition;

https://www.wendangku.net/doc/2211829951.html,bels.StandardCategoryItemLabelGenerator;

https://www.wendangku.net/doc/2211829951.html,bels.StandardPieSectionLabelGenerator;

https://www.wendangku.net/doc/2211829951.html,bels.StandardXYItemLabelGenerator;

importorg.jfree.chart.plot.CategoryPlot;

importorg.jfree.chart.plot.PiePlot;

import org.jfree.chart.plot.PiePlot3D;

importorg.jfree.chart.plot.Plot;

importorg.jfree.chart.plot.PlotOrientation;

importorg.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.category.BarRenderer3D;

importorg.jfree.chart.renderer.category.CategoryItemRenderer;

importorg.jfree.chart.renderer.category.LineAndShapeRenderer;

importorg.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

importorg.jfree.chart.title.LegendTitle;

importorg.jfree.data.category.CategoryDataset;

importorg.jfree.data.category.DefaultCategoryDataset;

importorg.jfree.data.general.Dataset;

importorg.jfree.data.general.DefaultPieDataset;

importorg.jfree.data.xy.XYDataset;

importorg.jfree.data.xy.XYSeries;

importorg.jfree.data.xy.XYSeriesCollection;

importorg.jfree.ui.TextAnchor;

importorg.jfree.util.Rotation;

public class JChartServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

private static enumChartType {

BarChart,BarChart3D,PieChart,PieChart3D,LineChart,LineChart3D,XYLineChart

}

/**

* 处理请求

*/

public void service(ServletRequest request, ServletResponse response)throws ServletException, IOException { String type = request.getParameter("type");

ChartTypechartType = getChartType(Integer.parseInt(type));

response.setContentType("image/jpeg");

JFreeChart chart = createChart(getDataSet(chartType),chartType);

setChartStyle(chart);

ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 0.9f, chart,480, 350, null);

}

/**

* 创建图表

* @param dataset

* @paramchartType

* @return

*/

public static JFreeChartcreateChart(Dataset dataset,ChartTypechartType){

JFreeChart chart = null;

switch(chartType){

caseBarChart:

chart = ChartFactory.createBarChart("水果产量图",// 图表标题

"水果种类",// X轴的显示标签

"产量",// Y轴的显示标签

(CategoryDataset)dataset, // 数据集

PlotOrientation.VERTICAL, // 图表方向:水平、垂直

true,//是否显示图例(对于简单的柱状图必须是false)

false,

false);//是否生成URL链接

break;

case BarChart3D:

chart = ChartFactory.createBarChart3D("水果产量图",// 图表标题

"水果种类",// X轴的显示标签

"产量",// Y轴的显示标签

(CategoryDataset)dataset, // 数据集

PlotOrientation.VERTICAL, // 图表方向:水平、垂直

true,//是否显示图例(对于简单的柱状图必须是false)

false,//是否启用提示

false);//是否生成URL链接

break;

casePieChart:

chart = ChartFactory.createPieChart("水果产量图", (DefaultPieDataset)dataset, true,false, false);

break;

case PieChart3D:

chart = ChartFactory.createPieChart3D("水果产量图", (DefaultPieDataset)dataset, true,false, false);

break;

caseLineChart:

chart = ChartFactory.createLineChart("水果产量图", "水果种类",

"产量", (CategoryDataset)dataset, PlotOrientation.VERTICAL, true, false, false);

break;

case LineChart3D:

chart = ChartFactory.createLineChart3D("水果产量图", "水果种类",

"产量", (CategoryDataset)dataset, PlotOrientation.VERTICAL, true, false, false);

break;

caseXYLineChart:

chart = ChartFactory.createXYLineChart("苹果产量图", "月份",

"产量", (XYDataset)dataset, PlotOrientation.VERTICAL, true, false, false);

break;

}

return chart;

}

/**

* 设置chart风格

*

* @param chart

*/

public static void setChartStyle(JFreeChart chart) {

// 设置一个背景,从渐到深的倾斜

chart.setBackgroundPaint(new GradientPaint(0.0F, 0.0F, Color.PINK,10000F, 0.0F, Color.YELLOW));

chart.getTitle().setFont(new Font("SimSun", Font.BOLD, 12));// 标题的字体

Font font = new Font("黑体", Font.TRUETYPE_FONT, 10);// 公用字体

LegendTitle legend = (LegendTitle) chart.getLegend();// 图例

legend.setItemFont(font);

chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

Plot plot = chart.getPlot();

if (plot instanceofCategoryPlot) {

CategoryPlotcategryPlot = (CategoryPlot) chart.getPlot();// 图表层

plot.setBackgroundAlpha(0.6f);

plot.setForegroundAlpha(0.9F);// 设置透明度

CategoryAxisdomain_axis = categryPlot.getDomainAxis();

domain_axis.setTickLabelFont(font);// X轴标尺字体

domain_axis.setLabelFont(font);// X轴标题标签字体

//domain_axis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); //横坐标数据倾斜45度

ValueAxisvalue_axis = categryPlot.getRangeAxis();

value_axis.setTickLabelFont(font);// Y轴标尺字体

value_axis.setLabelFont(font);// Y轴标题标签字体

// VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭

chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

CategoryItemRenderer renderer = chart.getCategoryPlot().getRenderer();

renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());

//设置item(bar)标签值的位置是在上面还是在bar内

renderer.setBasePositiveItemLabelPosition(newItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_CENTER

));

if(renderer instanceofLineAndShapeRenderer){

((LineAndShapeRenderer)renderer).setBaseShapesVisible(true);//显示折线图上的数据标志

}

if(renderer instanceof BarRenderer3D){

((BarRenderer3D)renderer).setItemLabelAnchorOffset(10D);// 设置柱形图上的文字偏离值

}

renderer.setBaseItemLabelFont(new Font("Serif", Font.PLAIN, 10));

renderer.setBaseItemLabelsVisible(true);

}

if (plot instanceofPiePlot) {

PiePlotpiePlot = (PiePlot) chart.getPlot();// 得到3D饼图的plot对象

plot.setBackgroundAlpha(0.6f);

piePlot.setStartAngle(290); // 设置旋转角度

piePlot.setDirection(Rotation.CLOCKWISE); // 设置旋转方向:顺时针方向

piePlot.setForegroundAlpha(0.5f); // 设置透明度

piePlot.setLabelFont((new Font("宋体", Font.PLAIN, 12)));

piePlot.setLabelGenerator(new StandardPieSectionLabelGenerator( "{0}:{1}({2})"));//名称、值、百分比piePlot.setSectionOutlinesVisible(false); //设置扇区边框不可见

if(!(plot instanceof PiePlot3D)){

piePlot.setExplodePercent("苹果", 0.2D); //设置扇区分离显示

}

}

if(plot instanceofXYPlot){

XYPlotxyPlot = (XYPlot) chart.getPlot();

xyPlot.setBackgroundAlpha(0.6f);

ValueAxisdomain_axis = xyPlot.getDomainAxis();

domain_axis.setTickLabelFont(font);

domain_axis.setLabelFont(font);

ValueAxisrange_axis = xyPlot.getRangeAxis();

range_axis.setTickLabelFont(font);

range_axis.setLabelFont(font);

XYLineAndShapeRenderer renderer

= (XYLineAndShapeRenderer) xyPlot.getRenderer();

renderer.setBaseShapesVisible(true);//显示数据标志

renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());

renderer.setBaseItemLabelsVisible(true);

renderer.setBaseItemLabelFont(font);

}

}

public static ChartTypegetChartType(Integer type){

ChartTypechartType = ChartType.PieChart;

switch(type){

case 0: chartType = ChartType.BarChart;

break;

case 1: chartType = ChartType.BarChart3D;

break;

case 2: chartType = ChartType.PieChart;

break;

case 3: chartType = ChartType.PieChart3D;

break;

case 4: chartType = ChartType.LineChart;

break;

case 5: chartType = ChartType.LineChart3D;

break;

case 6: chartType = ChartType.XYLineChart;

break;

}

returnchartType;

}

/**

* 获取一个演示用的简单数据集对象

*

* @return

*/

private static Dataset getDataSet(ChartType type) {

switch(type){

caseBarChart :

case BarChart3D:

caseLineChart:

case LineChart3D:

DefaultCategoryDatasetcategorydataset = new DefaultCategoryDataset();

categorydataset.addValue(100, "北京", "苹果");

categorydataset.addValue(70, "上海", "苹果");

categorydataset.addValue(120, "广州", "苹果");

categorydataset.addValue(220, "北京", "梨子");

categorydataset.addValue(260, "上海", "梨子");

categorydataset.addValue(300, "广州", "梨子");

categorydataset.addValue(320, "北京", "葡萄");

categorydataset.addValue(370, "上海", "葡萄");

categorydataset.addValue(320, "广州", "葡萄");

categorydataset.addValue(490, "北京", "香蕉");

categorydataset.addValue(450, "上海", "香蕉");

categorydataset.addValue(400, "广州", "香蕉");

categorydataset.addValue(200, "北京", "荔枝");

categorydataset.addValue(230, "上海", "荔枝");

categorydataset.addValue(340, "广州", "荔枝");

returncategorydataset;

casePieChart:

case PieChart3D:

DefaultPieDatasetpieDataset = new DefaultPieDataset();

pieDataset.setValue("苹果", 100);

pieDataset.setValue("梨子", 200);

pieDataset.setValue("葡萄", 300);

pieDataset.setValue("香蕉", 400);

pieDataset.setValue("荔枝", 500);

returnpieDataset;

caseXYLineChart:

XYSeriesCollectionxyDataset = new XYSeriesCollection();

XYSeries apple = new XYSeries("苹果");

for(int i=0;i<12;i++){

apple.add(i+1, (int)(500*Math.random()));

}

xyDataset.addSeries(apple);

returnxyDataset;

}

return null;

}

}

2.web.xml

JChartServlet

com.logcd.servlet.JChartServlet

JChartServlet

/jChartImg

3.html中调用

JChart Test

jcommon-1.0.16.jar (302 KB)

gnujaxp.jar (226 KB)

jfreechart-1.0.13.jar (1.4 MB)

相关文档