index.jspD" />
首先编写web.xml:
xmlns="https://www.doczj.com/doc/bd13760720.html,/xml/ns/javaee" xmlns:xsi="https://www.doczj.com/doc/bd13760720.html,/2001/XMLSchema-instance" xsi:schemaLocation="https://www.doczj.com/doc/bd13760720.html,/xml/ns/javaee https://www.doczj.com/doc/bd13760720.html,/xml/ns/javaee/web-app_2_5.xsd">
显示柱状图代码页:index.jsp:
<%@ page contentType="text/html;charset=UTF-8"
import="java.sql.*,xuyan.model.*"%>
<%@ page
import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeCha rt,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.Servl
etUtilities,org.jfree.data.category.CategoryDataset,org.jfree.data.ge neral.DatasetUtilities,org.jfree.chart.plot.*,https://www.doczj.com/doc/bd13760720.html,bels. *,org.jfree.chart.renderer.category.BarRenderer3D,java.awt.*,org.jfre e.ui.*,org.jfree.chart.axis.AxisLocation,org.jfree.chart.title.TextTi tle,org.jfree.chart.axis.CategoryAxis,org.jfree.chart.axis.NumberAxis "%>
<%@ page
import="org.jfree.chart.ChartFactory,org.jfree.chart.JFreeCha rt,org.jfree.chart.plot.PlotOrientation,org.jfree.chart.servlet.Servl etUtilities,org.jfree.data.category.DefaultCategoryDataset"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
content="keyword1,keyword2,keyword3">
<%
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
Connection con = null;
Statement st = null;
ResultSet rs = null;
//连接数据库
con = new ConnDB().GetConn();
st = con.createStatement();
rs = st.executeQuery("select * from AnimalNum ");
while (rs.next()) {
dataset.addValue(rs.getInt(3), "北京", rs.getString(2));
dataset.addValue(rs.getInt(5), "上海", rs.getString(4));
dataset.addValue(rs.getInt(7), "天津", rs.getString(6));
}
JFreeChart chart = ChartFactory.createBarChart(
"统计图", "肉类", "销量",
dataset, PlotOrientation.VERTICAL, true, true, false);
//设置字体,不然会中文乱码的
Font font = new Font("宋体", Font.BOLD, 16);
TextTitle title = new TextTitle("肉类销量统计图", font);
chart.setTitle(title);//标题
CategoryPlot plot = chart.getCategoryPlot();
NumberAxis numberaxis = (NumberAxis)
plot.getRangeAxis();
CategoryAxis domainAxis = plot.getDomainAxis();
/*------设置X轴坐标上的文字-----------*/
domainAxis.setTickLabelFont(new
Font("sans-serif", Font.PLAIN, 11));
/*------设置X轴的标题文字------------*/
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
/*------设置Y轴坐标上的文字-----------*/
numberaxis.setTickLabelFont(new
Font("sans-serif", Font.PLAIN, 12));
/*------设置Y轴的标题文字------------*/
numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
/*------这句代码解决了底部汉字乱码的问题
-----------*/
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); //由底部文字才加,不然会出错
// 以上为文字设置
//以下为背景设置
//设置网格背景颜色
plot.setBackgroundPaint(Color.white);
//设置网格竖线颜色
plot.setDomainGridlinePaint(Color.pink);
//设置网格横线颜色
plot.setRangeGridlinePaint(Color.pink);
//显示每个柱的数值,并修改该数值的字体属性
BarRenderer3D renderer = new BarRenderer3D();
renderer
.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBaseItemLabelsVisible(true);
//默认的数字显示在柱子中,通过如下两句可调整数字的显示
//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
renderer.setItemLabelAnchorOffset(10D);
renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12));
renderer.setItemLabelsVisible(true);
//设置每个地区所包含的平行柱的之间距离
//renderer.setItemMargin(0.3);
plot.setRenderer(renderer);
//设置地区、销量的显示位置
//将下方的“肉类”放到上方
plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
//将默认放在左边的“销量”放到右方
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
//
String filename =
ServletUtilities.saveChartAsPNG(chart, 500, 300,
null, session);
String graphURL = request.getContextPath()
+ "/DisplayChart?filename=" + filename;
%>
usemap="#<%= filename %>">
显示结果: