struts2整合jfreechart时柱状图出现不能显示数值问题,主要是由于数值过大,超过柱子宽度,所以就不显示了。
解决办法:
调整下面3处的数值
构建图标类中
BarRenderer3D custombarrenderer3d=new BarRenderer3D();
a处、 custombarrenderer3d.setMaximumBarWidth(0.06);
b处、 custombarrenderer3d.setItemMargin(0.0000005);
struts 配置文件中
1300 调节宽度
下面附一个简单的例子
创建图表的类 通过getChart得到图表
/**
* FruitService.java
* com.lin.jfreecahrt
* zlj
* Jul 19, 2012
*
*/
package com.lin.jfreecahrt;
import java.awt.Color;
import java.awt.Font;
import java.util.EventObject;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer3D;
import org.jfree.chart.renderer.category.LayeredBarRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.ui.TextAnchor;
/*
* java.awt.Font,
org.jfree.chart.ChartFactory,
org.jfree.chart.JFreeChart,
org.jfree.chart.plot.PlotOrientation,
org.jfree.chart.servlet.ServletUtilities,
org.jfree.data.CategoryDataset,
org.jfree.data.DatasetUtilities,
org.jfree.chart.plot.CategoryPlot,
org.jfree.chart.axis.CategoryAxis,
org.jfree.chart.axis.ValueAxis,
org.jfree.chart.renderer.BarRenderer3D,
org.jfree.chart.labels.StandardCategoryItemLabelGenerator,
org.jfree.chart.axis.AxisLocation
*/
/**
* Class FruitService
* @author zlj
* @version
* @Date Jul 19, 2012 3:19:50 PM
*/
public class FruitService {
private JFreeChart chart=null;
/**
*
*/
public FruitService(){
}
public DefaultCategoryDataset getDataSet(){
DefaultCategoryDataset date=new DefaultCategoryDataset ();
date.addValue(700000, "一月", "java编程思想");
date.addValue(700000, "一月", "java核心技术");
date.addValue(700000, "一月", "设计模式");
date.addValue(900000, "二月", "java编程思想");
date.addValue(900000, "二月", "java核心技术");
date.addValue(900000, "二月", "设计模式");
date.addValue(1100000, "三月", "java编程思想");
date.addValue(1100000, "三月", "java核心技术");
date.addValue(1100000, "三月", "设计模式");
/*
date.addValue(1000, "四月", "java编程思想");
date.addValue(1000, "四月", "java核心技术");
date.addValue(1000, "四月", "设计模式");
date.addValue(800, "五月", "java编程思想");
date.addValue(800, "五月", "java核心技术");
date.addValue(800, "五月", "设计模式");*/
return date;
}
public JFreeChart getChart() {
// CategoryDataset data=getDataSet();
chart=ChartFactory.createBarChart3D(
"图书销量图表", //图标标题
"月份",//x轴变量显示名称
"销量", //y轴变量显示名称
getDataSet(), //要显示的数据
PlotOrientation.VERTICAL,//显示方向 水平、垂直
true,// 是否显示图例(对于简单的柱状图必须是false)
false,//是否生成工具
false//是否生成url
);
BarRenderer3D custombarrenderer3d=new BarRenderer3D();
custombarrenderer3d.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());//显示每个柱的数值
custombarrenderer3d.setBaseItemLabelsVisible(true);
//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题
custombarrenderer3d.setBasePositiveItemLabelPosition(new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
custombarrenderer3d.setItemLabelAnchorOffset(10D);// 设置柱形图上的文字偏离值
custombarrenderer3d.setItemLabelsVisible(true);
custombarrenderer3d.setBaseItemLabelPaint(Color.BLUE);// 设置数值色彩,默认黑色
custombarrenderer3d.setMaximumBarWidth(0.06);
custombarrenderer3d.setItemMargin(0.0000005);
/*chart.setBackgroundPaint(Color.WHITE);
CategoryPlot plot = chart.getCategoryPlot();
//CategoryAxis domainAxis = plot.getDomainAxis();
// domainAxis.setv
//((Object) domainAxis).setVerticalCategoryLabels(false);
// plot.setDomainAxis(domainAxis);
ValueAxis rangeAxis = plot.getRangeAxis();
//设置最高的一个 Item 与图片顶端的距离
rangeAxis.setUpperMargin(0.15);
//设置最低的一个 Item 与图片底端的距离
rangeAxis.setLowerMargin(0.15);
plot.setRangeAxis(rangeAxis);
BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseOutlinePaint(Color.BLACK);
//设置 Wall 的颜色
renderer.setWallPaint(Color.gray);
//设置每种水果代表的柱的颜色
renderer.setSeriesPaint(0, new Color(0, 0, 255));
renderer.setSeriesPaint(1, new Color(0, 100, 255));
renderer.setSeriesPaint(2, Color.GREEN);
//设置每个地区所包含的平行柱的之间距离
renderer.setItemMargin(0.1);
//显示每个柱的数值,并修改该数值的字体属性
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelsVisible(true);
plot.setRenderer(renderer);
//设置柱的透明度
plot.setForegroundAlpha(0.6f);
//设置地区、销量的显示位置
plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);*/
//设置柱子显示值
//renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
//renderer.setBaseItemLabelsVisible(true);
//BarRenderer custombarrenderer3d3d = new BarRenderer();
//custombarrenderer3d3d.setBaseItemLabelPaint(Color.RED);//数据字体的颜色
//custombarrenderer3d3d.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
//custombarrenderer3d3d.setBaseItemLabelsVisible(true);
/*custombarrenderer3d.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
custombarrenderer3d.setItemLabelFont(new Font("黑体",Font.BOLD,12));
custombarrenderer3d.setItemLabelAnchorOffset(1);
custombarrenderer3d.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
custombarrenderer3d.setItemLabelsVisible(true);*/
CategoryPlot plot = chart.getCategoryPlot();
plot.setForegroundAlpha(0.6f);
plot.setRenderer(custombarrenderer3d);
return chart;
}
public void setChart(JFreeChart chart) {
this.chart = chart;
}
}
处理图表的action
/**
* JFreeChartAction.java
* com.lin.action
* zlj
* Jul 19, 2012
*
*/
package com.lin.action;
import org.jfree.chart.JFreeChart;
import com.lin.jfreecahrt.ChartService;
import com.lin.jfreecahrt.FruitService;
import com.opensymphony.xwork2.ActionSupport;
/**
* Class JFreeChartAction
* @author zlj
* @version
* @Date Jul 19, 2012 5:01:34 PM
*/
public class JFreeChartAction extends ActionSupport{
private JFreeChart chart;
@Override
public String execute(){
FruitService fs=new FruitService();
chart=fs.getChart();
return SUCCESS;
}
public JFreeChart getChart() {
return chart;
}
public void setChart(JFreeChart chart) {
this.chart = chart;
}
}
struts.xml 配置文件
600
1300
jsp引用页面 chart.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
自己导入相应的jar就可以了