Struts2 与 JfreeChart_1.0.14 图表
1.先加入相关依赖包
jcommon-1.0.17.jar
jfreechart-1.0.14.jar
struts2-jfreechart-plugin-2.1.8.1.jar
iText-2.1.5.jar //为生成PDF
poi-2.5.1.jar //为生成XLS
2.创建图片
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.util.Random;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.Axis;
import org.jfree.chart.block.BlockBorder;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.TextAnchor;
public class ChartUtil2 {
private static final Font PLOT_FONT = new Font("宋体", Font.BOLD, 15);
/**
* 创建数据集合
*
* @return CategoryDataset对象
*/
public static CategoryDataset createDataSet() {
// 图例名称
String[] line = { "杀毒软件一", "杀毒软件二" };
// 类别
String[] category = { "2004年", "2005年", "2006年", "2007年", "2008年" };
Random random = new Random(); // 实例化Random对象
// 实例化DefaultCategoryDataset对象
DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
// 使用循环向数据集合中添加数据
for (int i = 0; i < line.length; i++) {
for (int j = 0; j < category.length; j++) {
dataSet.addValue(100000 + random.nextInt(100000), line[i],
category[j]);
}
}
return dataSet;
}
/**
* 生成制图对象
*
* @param is3D
* 是否为3D效果
* @return JFreeChart对象
*/
public static JFreeChart createChart(boolean is3D) {
JFreeChart chart = null;
if (is3D) {
chart = ChartFactory.createLineChart3D("2004-2008年优秀杀毒软件杀毒数量统计", // 图表标题
"杀毒软件", // X轴标题
"查杀病毒数量",// Y轴标题
createDataSet(),// 绘图数据集
PlotOrientation.VERTICAL,// 绘制方向
true,// 显示图例
true,// 采用标准生成器
false// 是否生成超链接
);
} else {
chart = ChartFactory.createLineChart("2004-2008年优秀杀毒软件杀毒数量统计", // 图表标题
"杀毒软件", // X轴标题
"查杀病毒数量", // Y轴标题
createDataSet(), // 绘图数据集
PlotOrientation.VERTICAL, // 绘制方向
true, // 是否显示图例
true, // 是否采用标准生成器
false // 是否生成超链接
);
}
chart.getTitle().setFont(new Font("隶书", Font.BOLD, 23)); // 设置标题字体
chart.getTitle().setPaint(Color.WHITE);
chart.setBackgroundPaint(new Color(1, 6, 98)); // 设置背景色
//图例区
LegendTitle legendTitle = chart.getLegend(); // 获得图例
legendTitle.setItemFont(new Font("宋体", Font.BOLD, 15)); // 设置图例类别字体
legendTitle.setBackgroundPaint(new Color(1, 6, 98)); //背景颜色
legendTitle.setFrame(BlockBorder.NONE); //不要边框
legendTitle.setItemPaint(Color.WHITE); //字体颜色
legendTitle.setPosition(RectangleEdge.RIGHT); //设置图例显示位置
//绘图区
CategoryPlot plot = chart.getCategoryPlot(); // 获取绘图区对象
plot.getDomainAxis().setTickLabelPaint(Color.WHITE); //坐标轴标尺值颜色
plot.getDomainAxis().setTickMarkPaint(new Color(45,157,248)); //坐标轴标尺值颜色
plot.getDomainAxis().setLabelPaint(new Color(45,157,248)); //分类标签的字体颜色
plot.getDomainAxis().setAxisLinePaint(new Color(45,157,248)); // 坐标轴线条颜色
BasicStroke realLine2 = new BasicStroke(2f); // 设置实线
plot.getDomainAxis().setTickMarkStroke(realLine2); //坐标轴标尺笔触
plot.getDomainAxis().setAxisLineStroke(realLine2);
plot.getDomainAxis().setLabelFont(PLOT_FONT);// 设置横轴字体
plot.getDomainAxis().setTickLabelFont(PLOT_FONT);// 设置坐标轴标尺值字体
plot.getRangeAxis().setLabelFont(PLOT_FONT);// 设置纵轴字体
plot.getRangeAxis().setTickLabelPaint(Color.WHITE); //坐标轴标尺值颜色
plot.getRangeAxis().setTickMarkPaint(new Color(45,157,248)); //坐标轴标尺值颜色
plot.getRangeAxis().setLabelPaint(new Color(45,157,248));
plot.getRangeAxis().setAxisLinePaint(new Color(45,157,248)); // 坐标轴线条颜色
plot.getRangeAxis().setTickMarkStroke(realLine2); //坐标轴标尺笔触
plot.getRangeAxis().setAxisLineStroke(realLine2);
plot.setBackgroundPaint(new Color(1, 6, 98));// 设置绘图区背景色
plot.setRangeGridlinePaint(new Color(29,105,195));// 设置水平方向背景线颜色
plot.setRangeGridlineStroke(realLine2);
plot.setRangeGridlinesVisible(true);// 设置是否显示水平方向背景线,默认值为true
plot.setDomainGridlinePaint(Color.RED);// 设置垂直方向背景线颜色
plot.setDomainGridlinesVisible(false);// 设置是否显示垂直方向背景线,默认值为false
plot.setNoDataMessage( " 找不到可用数据 " );
//折线对象区
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer(); // 获取折线对象
renderer.setUseOutlinePaint(true); //是否显示数据点轮廓
renderer.setBaseOutlinePaint(Color.WHITE); //设置数据点轮廓颜色
renderer.setBaseOutlineStroke(realLine2); // 笔触
renderer.setBaseShapesVisible(true); //是否显示图形的形状
renderer.setSeriesPaint(0,new Color(6,188,22)); //指定分类图形的颜色
renderer.setSeriesPaint(1,new Color(242,181,32));
renderer.setSeriesShape(0,new Rectangle(-5,-5,10,10)); //指定分类图形的形状
renderer.setSeriesShape(1,new Rectangle(-5,-5,10,10));
//renderer.setSeriesShape(2,ShapeUtilities.createTranslatedShape());
BasicStroke realLine = new BasicStroke(5f); // 设置实线
float dashes[] = { 8.0f }; // 定义虚线数组
BasicStroke brokenLine = new BasicStroke(5f, // 线条粗细
BasicStroke.CAP_SQUARE, // 端点风格
BasicStroke.JOIN_MITER, // 折点风格
8.f, // 折点处理办法
dashes, // 虚线数组
0.0f); // 虚线偏移量
renderer.setSeriesStroke(0, realLine);// 利用虚线绘制
renderer.setSeriesStroke(1, realLine);// 利用虚线绘制
//renderer.setSeriesStroke(2, brokenLine);// 利用实线绘制
return chart;
}
public static void main(String args[])
{
ChartUtil2 chartUtil = new ChartUtil2();
ChartFrame frame = new ChartFrame("First", chartUtil.createChart(false));
frame.pack();
frame.setVisible(true);
}
}
3.struts2 调用,展示图表
import org.jfree.chart.JFreeChart;
import com.action.util.ChartUtil;
import com.opensymphony.xwork2.ActionSupport;
public class LineChartAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = -3626091249067573096L;
public JFreeChart getChart() {
return ChartUtil.createChart(false);
}
}
4.struts.xml 配置
注意修改struts-default 为 jfreechart-default。如下:
<package name="default" namespace="" extends="jfreechart-default">
<action name="lineChart" class="com.action.LineChartAction">
<result type="chart">
<param name="width">500</param>
<param name="height">400</param>
</result>
</action>
</package>
5.下载图表
import java.io.BufferedOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import com.action.util.ChartUtil;
public class DownLoadChartServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -6261312275846793536L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletOutputStream outStream = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(outStream);
try{
// 设置响应类型及响应头
response.setContentType("application/x-msdownload");
response.addHeader("Content-Disposition", "attachment; filename=\""
+ "testChart.jpg" + "\"");
JFreeChart freeChart = ChartUtil.createChart(false);
ChartUtilities.writeChartAsJPEG(bos, freeChart, 800, 600); //输出图表为jpg
bos.flush();
}finally {
if(outStream != null) {
outStream.close();
}
if(bos != null) {
bos.close();
}
}
}
}
分享到:
相关推荐
Struts2 框架与 JFreeChart 的整合允许开发者在 Web 应用程序中创建交互式的图表,如饼图、柱状图等。JFreeChart 是一个强大的 Java 图表库,可以生成高质量的静态图表,而 Struts2 则是用于构建 MVC(模型-视图-...
将JFreeChart与Struts2结合,可以让开发者在Web应用中方便地展示动态图表。 **1. 环境搭建** 在使用JFreeChart与Struts2结合之前,需要先下载并配置相关依赖库。这包括JFreeChart的核心库(jfreechart-1.0.14.jar...
- 将必要的库文件添加到项目的类路径中,包括jfreechart-1.0.14.jar、struts2-jfreechart-plugin-2.2.1.jar和jcommon-1.0.17.jar。这些库提供了绘制图表所需的功能。 2. **编写Action类**: - 创建一个名为...
2. **jfreechart-1.0.14**:这是JFreeChart的主要库文件,提供了丰富的图表类型和自定义选项。这个版本1.0.14包含了许多改进和修复,使得开发者能够更方便地创建和定制图表。通过JFreeChart,你可以设置图表的标题、...
- `jfreechart-1.0.14.jar`:用于生成各种图表的库,常用于数据分析和展示。 - `dwr.jar`:Direct Web Remoting,提供了浏览器和服务器之间的实时通信,支持AJAX应用。 - `iText-2.1.5.jar`:PDF文档生成库,可用于...
9. **与其他技术集成**:JFreeChart可以很好地与Servlet、JSP、Struts、Spring等Web框架集成,用于动态生成图表。同时,由于其跨平台特性,JFreeChart也可在Android和JavaFX等平台上使用。 10. **学习资源**:...