关注&&&&&&&&&&&

解决方案 »

  1.   

    http://www.javaworld.com/javaworld/jw-12-2002/jw-1227-opensourceprofile.html
      

  2.   

    jFreeChart初探 
    jFreeChart也许对大家来说很陌生,她是一款免费的、功能强大的统计图生成工具,可以直接生成PNG,JPG等各式的文件
    为我们java项目的开发增加了一部利器。她的英文简介
    JFreeChart is a free Java class library for generating charts, including: 
    pie charts; 
    line charts and horizontal/vertical bar charts (regular and stacked, with optional 3D-effect); 
    XY plots and scatter plots; 
    time series, high/low/open/close charts and candle stick charts; 
    combination charts; 
    Pareto charts; 
    Gantt charts; 
    bubble charts; 
    wind plots, meter charts and symbol charts; 正好我最近的一个项目用到她,于是就很粗略的看了一下,现在把它拿出来和大家分享,希望对大家的工作有所
    帮助。本文主要是讲解她在jsp上面的应用。例子采用jsp+javaBean结构实现准备工作:首先我们需要什么?当然是jFreeChart的package了,可以在她的官方网站上面找到下载链接
    http://www.jfree.org/jfreechart/,把包下下来,配置到tomcat当中,然后可以开始我们的Jfreechart之旅
    了。下面我要做的是一个饼状统计图,首先建立javaBean文件文件名:Tryitshow.javapackage com.tryit;import java.io.*;
    import java.awt.Insets;
    import java.awt.Font;
    import java.io.PrintWriter;
    import java.text.SimpleDateFormat;
    import java.util.Iterator;
    import java.util.Locale;
    import java.text.NumberFormat;
    import javax.servlet.http.HttpSession;
    import org.jfree.data.*;
    import org.jfree.chart.*;
    import org.jfree.chart.axis.*;
    import org.jfree.chart.renderer.VerticalBarRenderer;
    import org.jfree.chart.renderer.StandardXYItemRenderer;
    import org.jfree.chart.plot.*;
    import org.jfree.chart.entity.*;
    import org.jfree.chart.tooltips.*;
    import org.jfree.chart.urls.*;
    import org.jfree.chart.servlet.*;
    import org.jfree.chart.TextTitle;
    import java.net.URL;public class Tryitshow
    {
    public static String generatePieChart(String infoStr, String titles,HttpSession session, PrintWriter pw)
    {
    String filename = null;
    Font font;try {
    // 建立PieDataSet
    DefaultPieDataset data = new DefaultPieDataset();
    String ss[]=infoStr.split(",");
    for (int n=0;n<ss.length;n++)
    {
    String ssPart[]=ss[n].split("#");
    int tt=Integer.parseInt(ssPart[1]);
    String mm=ssPart[0];
    data.setValue(mm,tt);
    }// 生成chart物件
    PiePlot plot = new PiePlot(data);
    plot.setInsets(new Insets(0, 5, 5, 5));plot.setToolTipGenerator(new StandardPieToolTipGenerator());font=new Font("黑体",Font.CENTER_BASELINE,20);//这个地方是设置统计图标题的字体和大小JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);TextTitle tt=new TextTitle(titles);
    tt.setFont(font);
    chart.setBackgroundPaint(java.awt.Color.white);//统计图片的底色
    chart.setTitle(tt);// 把生成的文件写入到临时的目录中
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
    filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
    //选择存储成png格式的文件,当然你也可以使用saveChartAsJPEG的方法生成jpg图片// 把image map 写入到 PrintWriter
    ChartUtilities.writeImageMap(pw, filename, info);
    pw.flush();
    }
    catch (Exception ex) {
    System.out.println("error:"+ex.getMessage());
    }
    return filename;
    }
    }
    接着是jsp文件
    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import = "com.tryit.Tryitshow" %>
    <%@ page import = "java.io.PrintWriter" %>
    <%@ page import = "java.text.SimpleDateFormat" %>
    <%@ page import = "java.text.ParseException" %>
    <%@ page import = "java.util.ArrayList" %>
    <%@ page import = "java.util.Date" %>
    <%@ page import = "java.util.Iterator" %>
    <%@ page import = "java.util.Locale" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <TITLE> New Document </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="">
    <META NAME="Keywords" CONTENT="">
    <META NAME="Description" CONTENT="">
    </HEAD>
    <%
    String filename = Tryitshow.generatePieChart("本科#100,专科#200","人才学历信息统计",session, new PrintWriter(out));String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
    %>
    <BODY>
    <img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">
    </BODY>
    </HTML>ok,大功告成,当然,你可以采用其他方式,比如你可以把DataSet的数据设置在xml文件中,从xml文件读取
    统计数据中添加百分比等等,还可以选择生成柱状图、折线图等。jFreeChart还有很多其他的用法,希望大家可以多多交流。
    web.xml文件的配置<web-app>
    <servlet>
    <servlet-name>DisplayChart</servlet-name>
    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>DisplayChart</servlet-name>
    <url-pattern>/servlet/DisplayChart</url-pattern>
    </servlet-mapping>
    </web-app>
      

  3.   

    一:jfreechart介绍
    jfreechart是一个免费创建图片的java工具.可以创建如下图形:
    饼图(pie charts;)
    曲线图(line charts )
    柱状图(horizontal/vertical bar charts)
    甘特图(Gantt charts; )
    XY plots and scatter plots; 
    time series, high/low/open/close charts and candle stick charts; 
    combination charts; 
    Pareto charts; 
    bubble charts; 
    wind plots, meter charts and symbol charts; 
    从以下地址可以看到jfreechart可以创建的图形类型
    http://www.jfree.org/jfreechart/samples.html
    sourceforge有一个基于jfreechart的项目Cewolf可以很方便的在jsp/servlet中创建图片
    jfreechart目前(2003-05-08)版本为0.98
    希望得到详细的信息或下载jfreechart请访问如下站点:
    http://www.jfree.org/jfreechart/二:特别说明:
    jfreechart是一个开源项目,但是文档是需要40美金去购买的。
    还有一个很重要的问题,jfreechart如果使用中文,他使用的默认字体
    显示出来的中文会很模糊,你可能需要修改源代码。
    下面我就举几个简单的例子说明一下如何使用jfreechart创建图片
    在开发中有可能会导入以下的类
    import com.jrefinery.chart.ChartFactory;
    import com.jrefinery.chart.ChartUtilities;
    import com.jrefinery.chart.JFreeChart;
    import com.jrefinery.chart.TextTitle;
    import com.jrefinery.chart.axis.NumberAxis;
    import com.jrefinery.chart.plot.CategoryPlot;
    import com.jrefinery.chart.plot.PiePlot;
    import com.jrefinery.data.Day;
    import com.jrefinery.data.DefaultCategoryDataset;
    import com.jrefinery.data.DefaultPieDataset;
    import com.jrefinery.data.TimeSeries;
    import com.jrefinery.data.TimeSeriesCollection;
    import com.jrefinery.data.TimeSeriesDataPair;
    在0.98以后包由com.jrefinery.*改变为:org.jfree三:创建饼图
    //图片标题
    String title = "空调2002年市场占有率";
    //设定数据源
    DefaultPieDataset piedata = new DefaultPieDataset();
    //第一个参数为名称,第二个参数是double数
    piedata.setValue("联想", 27.3);
    piedata.setValue("长城", 12.2);
    piedata.setValue("海尔", 5.5);
    piedata.setValue("美的", 17.1);
    piedata.setValue("松下", 9.0);
    piedata.setValue("科龙", 19.0);
    //创建JFreeChart,都使用ChartFactory来创建JFreeChart,很标准的工厂设计模式
    JFreeChart chart =
    ChartFactory.createPieChart(title, piedata, true, true, true);
    //设定图片标题
    chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15)));
    //chart.addSubtitle(new TextTitle("2002财年分析", new Font("隶书", Font.ITALIC, 12)));
    //设定背景
    chart.setBackgroundPaint(Color.white);
    //chart.s
    //饼图使用一个PiePlot 
    PiePlot pie = (PiePlot)chart.getPlot();
    //pie.setSectionLabelType(PiePlot.NAME_AND_PERCENT_LABELS);
    pie.setSectionLabelType(PiePlot.NAME_AND_VALUE_LABELS);
    //设定显示格式(名称加百分比或数值)
    pie.setPercentFormatString("#,###0.0#%");
    //设定百分比显示格式
    pie.setBackgroundPaint(Color.white);
    pie.setSectionLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12));
    //设定背景透明度(0-1.0之间)
    pie.setBackgroundAlpha(0.6f);
    //设定前景透明度(0-1.0之间)
    pie.setForegroundAlpha(0.90f);
    //输出文件到指定目录
    String rfname = MathUtil.getRoundCode(12) + ".jpeg";
    String fileName = "d:/test/" + rfname;
    try {
    //可以保存文件为jpg或png格式。
    ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600);
    //第一个参数为文件名
    //第二个参数质量
    //第三个参数为哪个chart创建图片
    //第四个宽度
    //第五个高度
    } catch (IOException exz) {
    System.out.print("....Cant’t Create image File");
    }其实使用JFreeChart创建图片很简单,不同的的图片类型区别在于设置数据集四:创建曲线图
    // create a default chart based on some sample data...
    //曲线图标题
    String title = "趋势分析";
    //曲线图X轴提示
    String domain = "月份走势";
    //曲线图Y轴提示
    String range = "应收余额";
    //曲线图自标题
    String subtitleStr = "2003财年分析";
    //创建时间数据源
    //每一个TimeSeries在图上是一条曲线
    TimeSeries ca = new TimeSeries("用友");
    for (int i = 1999; i < 2005; i++) {
    for (int mon = 0; mon < 12; mon++) {
    //ca.add(new Month(mon + 1, i), new Double(500 + Math.random() * 100));
    //TimeSeriesDataPair是一个时间点的数值体现
    ca.add(
    new TimeSeriesDataPair(
    new Day(1, mon + 1, i),
    new Double(500 + Math.random() * 100)));
    }
    }TimeSeries ibm = new TimeSeries("金碟");
    for (int i = 1999; i < 2005; i++) {
    for (int mon = 0; mon < 12; mon++) {
    //ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100));
    ibm.add(
    new TimeSeriesDataPair(
    new Day(1, mon + 1, i),
    new Double(400 - Math.random() * 100)));
    }
    }TimeSeries king = new TimeSeries("东软");
    for (int i = 1999; i < 2005; i++) {
    for (int mon = 0; mon < 12; mon++) {
    //ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100));
    king.add(
    new TimeSeriesDataPair(
    new Day(1, mon + 1, i),
    new Double(300 - Math.random() * 100)));
    }
    }
    //时间曲线数据集合
    TimeSeriesCollection dataset = new TimeSeriesCollection();
    dataset.addSeries(ca);
    dataset.addSeries(ibm);
    dataset.addSeries(king);
    //dataset.addSeries(jpy);
    //dataset.addSeries(mav);
    //时间曲线元素
    JFreeChart chart =
    ChartFactory.createTimeSeriesChart(
    title,
    domain,
    range,
    dataset,
    true,
    true,
    false);
    // then customise it a little...
    TextTitle subtitle =
    new TextTitle(subtitleStr, new Font("黑体", Font.BOLD, 12));
    chart.addSubtitle(subtitle);
    chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15)));
    //pie.setSeriesLabelFont(new Font("黑体", Font.BOLD, 15));
    chart.setBackgroundPaint(
    new GradientPaint(0, 0, Color.white, 0, 1000, Color.blue));
    //sysout
    //输出文件到指定目录
    String rfname = MathUtil.getRoundCode(22) + ".jpeg";
    String fileName = "d:/test/" + rfname;
    try {
    //for
    //System.out.println();
    ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600);
    // log.info("....Create image File:" + fileName);
    } catch (IOException exz) {
    System.out.print("....Cant’t Create image File");
    }
    五:创建柱状图
    String title = "柱状图测试";
    String domain = "单位比较";
    String range = "数值";
    //CategoryDataset data = DemoDatasetFactory.createCategoryDataset();
    DefaultCategoryDataset data = new DefaultCategoryDataset();
    for (int r = 0; r < 5; r++) {
    String rowKey = "单位 [" + (r + 1)+"]" ;
    //第一层循环:分析对象
    for (int c = 0; c < 6; c++) {
    //第二层循环:分析对象在时间点上的数据
    String columnKey = "2001年" + (c + 1) + "月";
    data.addValue(new Double(r * c + 5), rowKey, columnKey);
    }
    }JFreeChart chart =
    ChartFactory.createVerticalBarChart(
    title,
    domain,
    range,
    data,
    true,
    true,
    false);
    // then customise it a little...
    chart.setBackgroundPaint(
    new GradientPaint(0, 0, Color.white, 1000, 0, Color.red));
    chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15)));
    CategoryPlot plot = (CategoryPlot)chart.getPlot();
    plot.setForegroundAlpha(0.9f);
    plot.setValueLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12));
    //plot.setSectionLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12));
    //注意以下代码
    NumberAxis verticalAxis = (NumberAxis)plot.getRangeAxis();
    verticalAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
    // 输出文件到指定目录
    String rfname = MathUtil.getRoundCode(22) + "b.jpeg";
    String fileName = "d:/test/" + rfname;
    try {
    ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600);
    // log.info("....Create image File:" + fileName);
    } catch (IOException exz) {
    System.out.print("....Cant’t Create image File");
    }六:结束语
    个人感觉JFreeChart可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的
    不够好,特别是使用中文的时候字体很不清晰。因为这个原因建议你自己去修改他的源代码
    最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多
    上社区.因为时间等原因我只介绍了三种图片的创建,其他类型的图片可以参考jfreechart提
    供的例子。
      

  4.   

    SDK的demo里有一个是3D旋转的框架图形,也许对你会有帮助。
      

  5.   

    非常感谢各位的支持,:)
    对于jfreechart,我也在研究中,谢谢!
      

  6.   

    handsomeghost(方鸿渐) 发的帖子我看了,顶一下
      

  7.   

    jdk自带的类库中不是有吗?汽车飞机大炮都能画,还有什么画不了的?
    在jdk目录中搜索一下 *.html。挨个看看哪个是你需要的,然后还能看到源代码。
      

  8.   

    同意hx9111,一看主题‘小女子’,好像是男人的全上来了:>
    不过这也反映了一个现象:在这里小女子真的太少了,呵!