您的位置:首页 > Web前端 > JavaScript

extjs建立jfreechart柱状图

2016-01-04 16:36 495 查看
1.extjs前台代码

Ext
.onReady(function() {

Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

var dpm = 'submitter_dpm';

var tools = [ {
id : 'close',
handler : function(e, target, panel) {
panel.ownerCt.remove(panel, true);
}
} ];

var viewport = new Ext.Viewport({

listeners:{
beforerender : function(){
Ext.Ajax.request({
url : '../sys_pro_stat/userAction_pro_stat_createBarChart',
method : 'POST',
params : {fields : dpm},
success : function(response, options) {
},
failure : function(response, options) {
Ext.MessageBox.alert('失败', '请求超时或网络故障,错误编号:'
+ response.status);
}
});
}

},
layout : 'fit',
items : [ {
xtype : 'portal',
region : 'center',
margins : '35 5 5 0',
items : [ {
columnWidth : .9,
style : 'padding:10px 0 10px 10px',
items : [ {
title : '提案统计',
tools : tools,
html : '<p align="center"><img alt="提案统计" src="../sys_pro/stat/chart_dpm.jpeg"></p>'
} ]
} ]
} ]
});

});

2.后台Java代码
public class UserAction_Stat extends UserAction {
private Proposal proposal;
private UserService_Stat uss;
CategoryDataset dataset;
String fields;
JFreeChart chart;

// 返回值为jfreechart导出的jpg图片的url
public String getStatictis() throws Exception {
return uss.getStatictis();
}

public void createBarChart() {
// 1.获取数据
dataset = getDataSet();
// 2.构造chart
createBarChart3D();

// 3. 处理chart中文显示问题
processChart(chart);

// 4. chart输出图片,获取图片路径
writeChartAsImage(chart);

}

/**
* 获取数据库数据
* */
public CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
List<Object[]> list = null;
list = uss.loadDataFromDB(fields);
Number value = 0;
String rowKeys = null;
String columnKeys = null;
if("submitter_dpm".equals(fields)){
rowKeys = "部门提案数";
}else if("category".equals(fields)){
rowKeys = "分类提案数";
}
for (Object[] object : list) {
value = (Number) object[1];
columnKeys = (String) object[0];
dataset.addValue(value, rowKeys, columnKeys);
}
return dataset;
}

/**
* 创建图例
* */
public void createBarChart3D(){
String xtitle = null;
if("submitter_dpm".equals(fields)){
xtitle = "部门";
}else if("category".equals(fields)){
xtitle = "类别";
}
chart = ChartFactory.createBarChart3D("提案总数统计", // 图表标题
xtitle, // 目录轴的显示标签
"数量", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
true, // 是否生成工具
true // 是否生成URL链接
);
}

/**
* 解决图表汉字显示问题
*
* @param chart
*/
public void processChart(JFreeChart chart) {
chart.setBackgroundPaint(SystemColor.controlHighlight);

// 设置图标标题字体
chart.getTitle().setFont(new Font("宋体", Font.PLAIN, 20));

CategoryPlot plot = chart.getCategoryPlot();
// 设置横轴标题字体
plot.getDomainAxis().setLabelFont(new Font("宋体", Font.PLAIN, 14));
plot.getDomainAxis().setCategoryLabelPositions(
CategoryLabelPositions.UP_45);

// 设置横轴标记的字体
plot.getDomainAxis().setTickLabelFont(new Font("宋体", Font.PLAIN, 12));
// 设置横轴标记字体颜色
plot.getDomainAxis().setTickLabelPaint(Color.RED);

// 设置纵轴标题字体
plot.getRangeAxis().setLabelFont(new Font("宋体", Font.PLAIN, 14));

// 设置纵轴标记字体
NumberAxis3D numberAxis3D = (NumberAxis3D) plot.getRangeAxis();
numberAxis3D
.setStandardTickUnits(NumberAxis3D.createIntegerTickUnits());
numberAxis3D.setTickLabelPaint(Color.RED);

// 设置图例字体
BarRenderer3D renderer3D = (BarRenderer3D) plot.getRenderer();
renderer3D.setBaseLegendTextFont(new Font("宋体", Font.PLAIN, 14));
renderer3D.setSeriesPaint(0, Color.ORANGE);

//设置数值显示在顶部
renderer3D.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer3D.setBaseItemLabelsVisible(true);
renderer3D.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_CENTER));
renderer3D.setItemLabelAnchorOffset(10D);//设置柱形图上的文字偏离值

//设置柱形图大小比例
int k = dataset.getColumnCount();
if (k == 1) {
plot.getDomainAxis().setLowerMargin(0.26);
plot.getDomainAxis().setUpperMargin(0.66);
} else if (k < 6) {
double margin = (1.0 - k * 0.08) / 3;
plot.getDomainAxis().setLowerMargin(margin);
plot.getDomainAxis().setUpperMargin(margin);
((BarRenderer3D) plot.getRenderer()).setItemMargin(margin);
} else {
((BarRenderer3D) plot.getRenderer()).setItemMargin(0.1);
}
}

/**
* 输出图片
*
* @param chart
*/
public void writeChartAsImage(JFreeChart chart) {
String fileName = null;
String folderName = "stat";
String subPath = "/sys_pro/" + folderName;
String tempJpegPath = ServletActionContext.getServletContext()
.getRealPath(subPath);
if("submitter_dpm".equals(fields)){
fileName = "chart_dpm.jpeg";
}else if("category".equals(fields)){
fileName = "chart_category.jpeg";
}

// 在目录下生成图片
File file = new File(tempJpegPath + "/" + fileName);
try {
ChartUtilities.saveChartAsJPEG(file, chart, 800, 450);
} catch (IOException e) {
e.printStackTrace();
}

}

// =====getter、setter====
public UserService_Stat getUss() {
return uss;
}

@Resource(name = "userServiceImp_stat_pro")
public void setUss(UserService_Stat uss) {
this.uss = uss;
}

public String getFields() {
return fields;
}

public void setFields(String fields) {
this.fields = fields;
}

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: