jfreechart 的一般配置显示
1 package kite.struts2.action; 2 3 4 import java.awt.Font; 5 6 import javax.annotation.Resource; 7 8 import kite.domain.Question; 9 import kite.domain.statistics.OptionStatisticsModel; 10 import kite.domain.statistics.QuestionStatisticsModel; 11 import kite.service.StatisticsService; 12 13 import org.jfree.chart.ChartFactory; 14 import org.jfree.chart.JFreeChart; 15 import org.jfree.chart.plot.PiePlot; 16 import org.jfree.chart.plot.PlotOrientation; 17 import org.jfree.data.category.DefaultCategoryDataset; 18 import org.jfree.data.general.DefaultPieDataset; 19 import org.jfree.util.Rotation; 20 import org.springframework.context.annotation.Scope; 21 import org.springframework.stereotype.Controller; 22 23 24 /** 25 * 针对非矩阵式题型的设计,可有饼图 柱状图 折线图等 26 */ 27 @Controller("chartOutputAction") 28 @Scope("prototype") 29 public class ChartOutputAction extends BaseAction<Question> { 30 private static final long serialVersionUID = -9021947290801678287L; 31 /* 平面饼图 */ 32 private static final int CHARTTYPE_PIE_2D = 0; 33 /* 立体饼图 */ 34 private static final int CHARTTYPE_PIE_3D = 1; 35 /* 水平平面柱状图 */ 36 private static final int CHARTTYPE_BAR_2D_H = 2; 37 /* 竖直平面柱状图 */ 38 private static final int CHARTTYPE_BAR_2D_V = 3; 39 /* 水平立体柱状图 */ 40 private static final int CHARTTYPE_BAR_3D_H = 4; 41 /* 竖直立体柱状图 */ 42 private static final int CHARTTYPE_BAR_3D_V = 5; 43 /* 平面折线图 */ 44 private static final int CHARTTYPE_LINE_2D = 6; 45 /* 立体折线图 */ 46 private static final int CHARTTYPE_LINE_3D = 7; 47 48 // 图表类型 49 private int chartType; 50 // 对哪个问题进行统计 51 private Integer qid; 52 53 // 注入统计服务 54 @Resource 55 private StatisticsService ss; 56 57 /** 58 * 生成图表并输出到浏览器 59 */ 60 public String execute() { 61 return SUCCESS; 62 } 63 64 @SuppressWarnings("deprecation") 65 public JFreeChart getChart() { 66 JFreeChart chart = null ; 67 try { 68 Font font = new Font("宋体", 0, 20);// 字体 69 QuestionStatisticsModel qsm = ss.statistics(qid); 70 DefaultPieDataset pieds = null;// 饼图的数据集 71 DefaultCategoryDataset cateds = null;// 种类数据集 72 //构造数据集 73 if(chartType < 2){ 74 pieds = new DefaultPieDataset(); 75 for (OptionStatisticsModel om : qsm.getOsms()) { 76 pieds.setValue(om.getOptionLabel(), om.getCount()); 77 } 78 } 79 else{ 80 cateds = new DefaultCategoryDataset(); 81 for (OptionStatisticsModel osm : qsm.getOsms()) { 82 cateds.addValue(osm.getCount(), osm.getOptionLabel(), ""); 83 } 84 } 85 86 // 判断要求的图形 87 switch (chartType) { 88 case CHARTTYPE_PIE_2D:// 平面饼图 89 chart = ChartFactory.createPieChart(qsm.getQuestion().getTitle(), pieds, true, false, false); 90 break ; 91 case CHARTTYPE_PIE_3D:// 立体饼图 92 chart = ChartFactory.createPieChart3D(qsm.getQuestion().getTitle(), pieds, true, true, true); 93 //设置前景色透明度 94 chart.getPlot().setForegroundAlpha(0.6f); 95 break ; 96 case CHARTTYPE_BAR_2D_H:// 平面条形图 97 chart = ChartFactory.createBarChart(qsm.getQuestion().getTitle(), "", "", cateds, 98 PlotOrientation.HORIZONTAL, true, true, true); 99 break ; 100 case CHARTTYPE_BAR_2D_V:// 平面条形图 101 chart = ChartFactory.createBarChart(qsm.getQuestion().getTitle(), "", "", cateds, 102 PlotOrientation.VERTICAL, true, true, true); 103 case CHARTTYPE_BAR_3D_H:// 平面条形图 104 chart = ChartFactory.createBarChart3D(qsm.getQuestion().getTitle(), "", "", cateds, 105 PlotOrientation.HORIZONTAL, true, true, true); 106 case CHARTTYPE_BAR_3D_V:// 平面条形图 107 chart = ChartFactory.createBarChart3D(qsm.getQuestion().getTitle(), "", "", cateds, 108 PlotOrientation.VERTICAL, true, true, true); 109 break ; 110 // 111 case CHARTTYPE_LINE_2D:// 平面条形图 112 chart = ChartFactory.createLineChart(qsm.getQuestion().getTitle(), "", "", cateds, 113 PlotOrientation.VERTICAL, true, true, true); 114 break ; 115 case CHARTTYPE_LINE_3D:// 平面条形图 116 chart = ChartFactory.createLineChart3D(qsm.getQuestion().getTitle(), "", "", cateds, 117 PlotOrientation.HORIZONTAL, true, true, true); 118 break ; 119 } 120 //设置标题和提示条中文 121 chart.getTitle().setFont(font); 122 chart.getLegend().setItemFont(font); 123 //chart.setBackgroundImageAlpha(0.2f); 124 125 //设置饼图特效 126 if(chart.getPlot() instanceof PiePlot){ 127 PiePlot pieplot = (PiePlot) chart.getPlot(); 128 pieplot.setLabelFont(font); 129 pieplot.setExplodePercent(0, 0.1); 130 pieplot.setStartAngle(-15); 131 pieplot.setDirection(Rotation.CLOCKWISE); 132 pieplot.setNoDataMessage("No data to display"); 133 //pieplot.setForegroundAlpha(0.5f); 134 //pieplot.setBackgroundImageAlpha(0.3f); 135 } 136 //设置非饼图效果 137 else{ 138 chart.getCategoryPlot().getRangeAxis().setLabelFont(font); 139 chart.getCategoryPlot().getRangeAxis().setTickLabelFont(font); 140 chart.getCategoryPlot().getDomainAxis().setLabelFont(font); 141 chart.getCategoryPlot().getDomainAxis().setTickLabelFont(font); 142 } 143 } catch (Exception e) { 144 e.printStackTrace(); 145 } 146 return chart ; 147 } 148 149 public int getChartType() { 150 return chartType; 151 } 152 153 public void setChartType(int chartType) { 154 this.chartType = chartType; 155 } 156 157 public Integer getQid() { 158 return qid; 159 } 160 161 public void setQid(Integer qid) { 162 this.qid = qid; 163 } 164 }