`

Struts2 与 JfreeChart_1.0.14 图表

阅读更多

                         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();
   }
  }
 }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics