首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

用jsp怎的生成柱状图,饼状图,折线图

2011-12-21 
用jsp怎样生成柱状图,饼状图,折线图现在,javaEE学完了,做个小项目练习练习,期中有一块 报表,想生成 柱状图

用jsp怎样生成柱状图,饼状图,折线图
现在,javaEE学完了,做个小项目练习练习,期中有一块 报表,想生成 柱状图 或者饼状图 或者折线图。

学 c/s 的时候在 面板上生成的,但在jsp页面上做不出来了,先谢谢大家。

[解决办法]
用jfreechart插件,开源的,你自己写?没多大意义,除非你要炼身手,呵
[解决办法]
jfreechart不错,还可以做一些温度计啦仪表盘啦,好多好可视化的图形,最重要的是免费的,使用起来比较简单
[解决办法]
EN ,JFREECHART,很好,很简单!
[解决办法]
http://blog.csdn.net/Ami121/category/394379.aspx
一些jfreechart的例子
jfreechat插件对于画web是个不错的选择
当然你也可以做成applet形式直接嵌入到jsp中
[解决办法]

探讨
谢谢大家,jfreechart是很好,但我不会用啊。

[解决办法]
我这里有现成的例子,需要的话,就把邮箱告诉我,给你发过去
[解决办法]
又多了解了一个插件Jfreechart
[解决办法]
我给你一个饼图和一个折线图的例子,你看看!
饼图的
Java code
class   BChart{public static void main(String[] args){                         PieDataset dataset = getDataSet();//设置数据源              JFreeChart chart = ChartFactory.createPieChart3D(                "时延分布统计图", // chart title                dataset,// data                true,// include legend                true,                false               );              PiePlot3D  plot=(PiePlot3D)chart.getPlot();                // 图片中显示百分比:默认方式                //plot.setLabelGenerator(new                         StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));            // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位             plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));             // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例                             plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));             // 设置背景色为白色             chart.setBackgroundPaint(Color.white);             // 指定图片的透明度(0.0-1.0)              plot.setForegroundAlpha(1.0f);             // 指定显示的饼图上圆形(false)还椭圆形(true)             plot.setCircular(true);             // 设置图标题的字体             Font font = new Font(" 黑体",Font.CENTER_BASELINE,20);             TextTitle title = new TextTitle(" 时延分布统计图");             title.setFont(font);              chart.setTitle(title);             FileOutputStream fos_jpg = null;             try {                  fos_jpg=new FileOutputStream("D:\\时延分布统计图.jpg");                  ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null);                  fos_jpg.close();             } catch (Exception e) {              }                       }            private static PieDataset getDataSet()//数据源构造        {             DefaultPieDataset dataset = new DefaultPieDataset();                     dataset.setValue("login.jsp",50);                         dataset.setValue("reg.jsp",60);             return dataset;         } }
[解决办法]
折线图的
Java code
class ZChart{public static void main(String[] args){JFreeChart chart = ChartFactory.createXYLineChart("固定uri时延分布图", "历次访问点",                "时延/ms", createDataSet(special), PlotOrientation.VERTICAL, true,                true, false);            FileOutputStream fos_jpg = null;         try {              fos_jpg=new FileOutputStream("D:\\mao.jpg");              ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,640,480,null);              fos_jpg.close();         } catch (Exception e) {          }                           }            private static XYSeriesCollection createDataSet() {//数据源构造方法        XYSeriesCollection seriesCollection = new XYSeriesCollection();        XYSeries series1 = new XYSeries("login.jsp");                    seriesCollection.addSeries(series1);        series1.add(1, 75);        series1.add(2, 41);        series1.add(3, 39);        series1.add(4, 33);        series1.add(5, 25);        series1.add(6, 36);        seriesCollection.addSeries(series1);                return seriesCollection;    }} 


[解决办法]
不用插件只能用纯脚本画了
[解决办法]
补充,加载jfreechart-1.0.1.jar,我用过了,没冲突,可以用!
[解决办法]
package cn.longhaul.zchart;

import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RectangleInsets;

/**
 * 曲线图的绘制
 */
public class LineXYChart {
/**
* 返回生成图片的文件名

* @param session
* @param pw
* @return 生成图片的文件名
*/
public String getLineXYChart(HttpSession session, PrintWriter pw,ArrayList data) {
XYDataset dataset = this.createDateSet(data);// 建立数据集
String fileName = null;
// 建立JFreeChart
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"销售时间曲线序列图", // title
"Date", // x-axis label
"Price", // y-axis label
dataset, // data
true, // create legend?
true, // generate tooltips?
false // generate URLs?
);
// 设置JFreeChart的显示属性,对图形外部部分进行调整
chart.setBackgroundPaint(Color.red);// 设置曲线图背景色
// 设置字体大小,形状
Font font = new Font("宋体", Font.BOLD, 12);
TextTitle title = new TextTitle("销售时间曲线序列图", font);
chart.setTitle(title);
// 副标题
//TextTitle subtitle = new TextTitle(deptname, new Font("黑体", Font.BOLD, 12));
//chart.addSubtitle(subtitle);
chart.setTitle(title); // 标题
// 设置图示标题字符
// TimeSeries s1 = new TimeSeries("历史曲线", Day.class);该中文字符
LegendTitle legengTitle = chart.getLegend();
legengTitle.setItemFont(font);
XYPlot plot = (XYPlot) chart.getPlot();// 获取图形的画布
plot.setBackgroundPaint(Color.lightGray);// 设置网格背景色
plot.setDomainGridlinePaint(Color.green);// 设置网格竖线(Domain轴)颜色
plot.setRangeGridlinePaint(Color.white);// 设置网格横线颜色
plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));// 设置曲线图与xy轴的距离
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
XYItemRenderer r = plot.getRenderer();
if (r instanceof XYLineAndShapeRenderer) {
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;
renderer.setBaseShapesVisible(true);
renderer.setBaseShapesFilled(true);
renderer.setShapesVisible(true);// 设置曲线是否显示数据点
}
// 设置Y轴
NumberAxis numAxis = (NumberAxis) plot.getRangeAxis();
NumberFormat numFormater = NumberFormat.getNumberInstance();
numFormater.setMinimumFractionDigits(2);
numAxis.setNumberFormatOverride(numFormater);
// 设置提示信息
StandardXYToolTipGenerator tipGenerator = new StandardXYToolTipGenerator(


"历史信息{1} 16:00,{2})", new SimpleDateFormat("MM-dd"),
numFormater);
r.setToolTipGenerator(tipGenerator);
// 设置X轴(日期轴)
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("MM-dd"));
ChartRenderingInfo info = new ChartRenderingInfo(
new StandardEntityCollection());
try {
fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, info,
session);// 生成图片
// Write the image map to the PrintWriter
ChartUtilities.writeImageMap(pw, fileName, info, false);
} catch (IOException e) {
e.printStackTrace();
}
pw.flush();
return fileName;// 返回生成图片的文件名
}

private XYDataset createDateSet(ArrayList al) {
TimeSeriesCollection dataset = new TimeSeriesCollection();// 时间曲线数据集合
TimeSeries s1 = new TimeSeries("销售曲线", Day.class);// 创建时间数据源,每一个//TimeSeries在图上是一条曲线
// s1.add(new Day(day,month,year),value),添加数据点信息
HashMap hm = null;
for (Iterator it = al.iterator(); it.hasNext();) {
hm = (HashMap) it.next();
String day=hm.get("day_nr").toString();
if(day.indexOf("总计")>-1){
}else{
int day_nr=Integer.parseInt(day);
int zmonth=Integer.parseInt(hm.get("zmonth").toString());
int zyear=Integer.parseInt(hm.get("zyear").toString());
int value=Integer.parseInt(hm.get("netwr").toString());
s1.add(new Day(day_nr, zmonth, zyear),value );
}
}
//s1.add(new Day(1, 2, 2006), 123.51);
//s1.add(new Day(2, 2, 2006), 122.1);
//s1.add(new Day(3, 2, 2006), 120.86);
//s1.add(new Day(4, 2, 2006), 122.50);
//s1.add(new Day(5, 2, 2006), 123.12);
//s1.add(new Day(6, 2, 2006), 123.9);
//s1.add(new Day(7, 2, 2006), 124.47);
//s1.add(new Day(8, 2, 2006), 124.08);
//s1.add(new Day(9, 2, 2006), 123.55);
//s1.add(new Day(10, 2, 2006), 122.53);
dataset.addSeries(s1);
dataset.setDomainIsPointsInTime(true);
return dataset;
}
}

[解决办法]
JFreechat等可以,其实 jfreechat也是用的awt和swing包下面的绘制函数,楼主有兴趣可以看看 jfreechat的源码
[解决办法]
我这里也写了一个
http://www.blogjava.net/landor2004/archive/2009/04/08/264386.html
[解决办法]
直接jfreechart 的好用,例子也不少
[解决办法]
用jfreechart插件,开源的,这个东西其实网上很多了,所以起来还是挺简单的,插件是一个好东西啊!
[解决办法]
jfreechat自带的demo里面都有,用decompile 反编译一下就可以看到源代码了。

我这里有个报表专区,有兴趣去看看
http://www.java2000.net/f30
[解决办法]
何必那么麻烦FusionCharts flash 报表组件完全配置 jsp/servelt生成xml文件
<html>
<head>
<title>FusionWidgets Chart Gallery - Gantt Chart</title>
<script language="JavaScript" src="FusionCharts8.js"></script>
<link rel='stylesheet' href='Styles8.css' />
</head>
<body bgcolor="#ffffff">
<table width='700' align='center' cellpadding='2' cellspacing='0'>
<tr>
<td align="center" class="textBold">Gantt Chart</td>
</tr>
<tr>
<td align="center">
<div id="chartdiv" align="center" class="text">
<p>&nbsp;</p>
<p>FusionWidgets needs Adobe Flash Player to run. If you're unable to see the chart here, it means that your browser does not seem to have the Flash Player Installed. You can downloaded it <a href="http://www.adobe.com/products/flashplayer/" target="_blank"><u>here</u></a> for free.</p>


</div>
<script type="text/javascript">
  var myChart = new FusionCharts("Gantt8.swf", "myChartId", "900", "450", "0", "0");
  myChart.setDataURL("Gantt8.xml");
myChart.render("chartdiv");
</script> </td>
</tr>
<tr height='10'>
<td></td>
</tr>
<tr>
<td align="center" class="text">Using legend in the chart to explain color keys. </td>
</tr>
<tr>
<td align="center">&nbsp;</td>
</tr>
<tr>
<td align="center">
<a href='Gantt8.xml' target='_blank'><img src='btnViewXML8.gif' border='0' alt='View XML for above chart' width="94" height="24" ></a> </td>
</tr>
</table>
</body>
</html>
[解决办法]
我记得老师讲的用jfreechart 很方便的
[解决办法]

Java code
public void appStatView() throws SQLException{                HttpServletRequest request = ServletActionContext.getRequest();        HttpServletResponse response = ServletActionContext.getResponse();        HttpSession session = request.getSession();                Connection con = null;        PreparedStatement pst = null;        ResultSet rs = null;        PrintWriter out = null;                try {            //获取驱动连接            con = this.getConnection();                                //数据源的获得,具体省略。。。。。。            rs = pst.executeQuery();                        Font font = new Font("宋体", 10, 15);            //            设置数据集            DefaultCategoryDataset dataset = new DefaultCategoryDataset();            while(rs.next()) {                dataset.setValue(rs.getInt("sum"), rs.getString("app_name"), rs.getString("app_name"));            }//            通过工厂类生成JFreeChart对象            JFreeChart chart = ChartFactory.createBarChart3D("系统登陆统计", "业务系统", "登陆次数", dataset,                     PlotOrientation.VERTICAL, true, true, false);                               TextTitle title = chart.getTitle();                        title.setFont(font);                        CategoryPlot plot = chart.getCategoryPlot();                        CategoryAxis domainAxis = plot.getDomainAxis();//获取横轴            domainAxis.setLabelFont(font);            domainAxis.setTickLabelFont(font);                        ValueAxis rangeAxis = plot.getRangeAxis();//获取纵轴            rangeAxis.setLabelFont(font);                          chart.getLegend().setItemFont(font);                        String filename = ServletUtilities.saveChartAsPNG(chart, 1000, 400, null, session);//生成文件            String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename;//生成文件URL                        sb = new StringBuilder();            sb.append("<img src='" + graphURL + "' height=400 border=0 style='width:100%' />");                        out = response.getWriter();            out.write(sb.toString());        }catch(Exception e) {            e.printStackTrace();        }finally {//释放资源            if(out != null) {                out.close();            }                        if(rs != null) {                rs.close();            }                        if(pst != null) {                pst.close();            }                        if(con != null) {                con.close();            }        }    }
[解决办法]
Jfreechart
------解决方案--------------------


jfreechart 用过几次 但别人给我说过还有其他的开源的 效果比jfreechart好看 上网搜下吧
[解决办法]
一个是jfreechart可以实现,另外一个就是IReport 工具,不知道楼主用过没有,这个是jasperreports jar报和iReport开发工具联合使用的,你可以学习一下。
[解决办法]
http://blog.csdn.net/zhaotao_king/archive/2008/12/18/3547563.aspx
jfreechart吧,上面地址有从数据库中返回数据并形成图形的例子……

热点排行