import java.io.*;import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;class BarChartDemo { public static void main(String[] args) throws IOException{  CategoryDataset dataset = getDataSet2();
  JFreeChart chart = ChartFactory.createBarChart3D(
       "水果产量图", // 图表标题
       "水果", // 目录轴的显示标签
       "产量", // 数值轴的显示标签
       dataset, // 数据集
       PlotOrientation.VERTICAL, // 图表方向:水平、垂直
       true,  // 是否显示图例(对于简单的柱状图必须是false)
       false,  // 是否生成工具
       false  // 是否生成URL链接
       );
       
  FileOutputStream fos_jpg = null;
  try {
   fos_jpg = new FileOutputStream("D:\\fruit.jpg");
   ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null);
  } finally {
   try {
    fos_jpg.close();
   } catch (Exception e) {}
  }
 }
 /**
  * 获取一个演示用的简单数据集对象
  * @return
  */
 private static CategoryDataset getDataSet() {
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  dataset.addValue(100, null, "苹果");
  dataset.addValue(200, null, "梨子");
  dataset.addValue(300, null, "葡萄");
  dataset.addValue(400, null, "香蕉");
  dataset.addValue(500, null, "荔枝");
  return dataset;
 }
}
请问如何在这个图中,将数据显示在每一个柱子的顶端?

解决方案 »

  1.   

    CategoryPlot   plot   =   chart.getCategoryPlot();
                BarRenderer3D   renderer   =   new   BarRenderer3D();
                //显示每个柱的数值,并修改该数值的字体属性
                renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
                renderer.setItemLabelFont(new   Font("黑体",   Font.PLAIN,   12));
                renderer.setItemLabelsVisible(true);
                plot.setRenderer(renderer);
      

  2.   

    网页上程序 :<% String fileName=null;
    BarChart bc=new BarChart();
    fileName=bc.getPictureName();
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename="   + fileName;%> 
    <body>
    <%=graphURL %>
    <%=fileName %>
      

  3.   

    class 文件 package Servlet;import java.io.CharArrayWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.sql.*;
    import java.text.DecimalFormat;import java.awt.Color;
    import java.awt.GradientPaint;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    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.CategoryAxis;
    import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
    import org.jfree.chart.labels.StandardCategoryToolTipGenerator;import org.jfree.chart.plot.CategoryPlot;
    import org.jfree.chart.plot.PlotOrientation;
    import org.jfree.chart.renderer.category.BarRenderer;
    import org.jfree.chart.servlet.ServletUtilities;import org.jfree.data.category.CategoryDataset;
    import org.jfree.data.category.DefaultCategoryDataset;
    import org.jfree.chart.axis.ValueAxis;
    import org.jfree.chart.axis.AxisLocation;
    import org.jfree.chart.entity.StandardEntityCollection;//import org.jfree.chart.axis.CategoryAxis;import DB.jdbc_DB;public class BarChart extends HttpServlet {
    private static final long serialVersionUID = 1L; static ResultSet rs; private static String PictureName = null; public void service(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException { res.setContentType("image/png");
    HttpSession session = req.getSession(); CategoryDataset dataset = createDataset(); JFreeChart chart = createChart(dataset); String filename = null;
    /*
     * DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     * dataset.addValue(300, "广州", "苹果"); dataset.addValue(200, "广州", "梨子");
     * dataset.addValue(500, "广州", "葡萄"); dataset.addValue(340, "广州", "芒果");
     * dataset.addValue(280, "广州", "?枝");
     */
    // ChartRenderingInfo info = new ChartRenderingInfo();
    CharArrayWriter cawMap = new CharArrayWriter();
    PrintWriter pwMap = new PrintWriter(cawMap);
    // ChartUtilities.writeImageMap(pwMap,"mapname",info, false);
    //String sMap = cawMap.toString(); ChartRenderingInfo info = new ChartRenderingInfo(
    new StandardEntityCollection()); filename = ServletUtilities.saveChartAsPNG(chart, 600, 400, info,
    session);
    setPictureName(filename);
    //  Write the image map to the PrintWriter 
    //   ChartUtilities.writeImageMap(pwMap, filename, info, null, null); 
    //  Write the image map to the PrintWriter 
    ChartUtilities.writeImageMap(pwMap, filename, info, true); pwMap.flush();
    //ChartUtilities.writeChartAsPNG(res.getOutputStream(), chart, 600, 400);
    // ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 300, chart,
    // 800,
    // 500, null); } public String setPictureName(String file) {
    return this.PictureName = file;
    } public String getPictureName() {
    return this.PictureName;
    } private static CategoryDataset createDataset() {
    // row keys...
    String series1 = "First";
    String series2 = "Second";
    //String series3 = "Third";
    // String series4 = "Four"; // column keys...
    //String category1 = "Category 1";
    // String category2 = "Category 2";
    // String category3 = "Category 3";
    //String category4 = "Category 4";
    //String category5 = "Category 5"; // create the dataset...
    rs = jdbc_DB.query("select * from Jchart_Column where write >0 ");
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    try {
    while (rs.next()) {
    dataset.addValue(Double.parseDouble(rs.getString(6)), series1,
    rs.getString(3));
    dataset.addValue(Double.parseDouble(rs.getString(5)), series2,
    rs.getString(3));
    //dataset.addValue(Double.parseDouble(rs.getString(3)),series2,rs.getString(1));
    //dataset.addValue(Double.parseDouble(rs.getString(5)),series3,rs.getString(1));
    //dataset.addValue(Double.parseDouble(rs.getString(5)),series4,rs.getString(1));
    }
    } catch (Exception e) {
    System.out.print("SQL " + e);
    } /*
     dataset.addValue(1.0, series1, category1);
     dataset.addValue(4.0, series1, category2);
     dataset.addValue(3.0, series1, category3);
     dataset.addValue(5.0, series1, category4);
     dataset.addValue(5.0, series1, category5);  dataset.addValue(5.0, series2, category1);
     dataset.addValue(7.0, series2, category2);
     dataset.addValue(6.0, series2, category3);
     dataset.addValue(8.0, series2, category4);
     dataset.addValue(4.0, series2, category5);
     */
    return dataset; } private static JFreeChart createChart(CategoryDataset dataset) { // create the chart...
    JFreeChart chart = ChartFactory.createBarChart("ポート - 転送レート",
    // chart title
    "番号", // domain axis label
    "転送レート", // range axis label
    dataset, // data
    PlotOrientation.VERTICAL, // orientation
    true, // include legend   colour show 
    true, // tooltips?
    true // URLs?
    ); // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART... // set the background color for the chart...
    chart.setBackgroundPaint(Color.white); // get a reference to the plot for further customisation...
    CategoryPlot plot = chart.getCategoryPlot(); ValueAxis rangeAxis2 = plot.getRangeAxis(); // ?置最高的一个 Item 与?片?端的距?
    rangeAxis2.setUpperMargin(0.15);
    // ?置最低的一个 Item 与?片底端的距?
    rangeAxis2.setLowerMargin(10.00); plot.setRangeAxis(rangeAxis2); plot.setBackgroundPaint(Color.lightGray);
    plot.setDomainGridlinePaint(Color.white);
    plot.setDomainGridlinesVisible(true);
    plot.setRangeGridlinePaint(Color.white); // set the range axis to display integers only...
    final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
    rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); // disable bar outlines...
    BarRenderer renderer = (BarRenderer) plot.getRenderer(); renderer.setDrawBarOutline(false);
    renderer
    .setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator(
    "{2}", new DecimalFormat()));
    // /renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator(StandardCategoryToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT_STRING, new DecimalFormat()));
    renderer.setItemMargin(0.01);

    GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.blue, 0.0f,
    0.0f, new Color(0, 0, 64));
    GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, Color.green, 0.0f,
    0.0f, new Color(0, 64, 0));

    renderer.setSeriesPaint(0, gp0);
    renderer.setSeriesPaint(1, gp1);

    // org.jfree.chart.axis.CategoryAxis dataset 生成的 3D 柱状?
    CategoryAxis domainAxis = plot.getDomainAxis();
    // ?置距??片left距?
    domainAxis.setLowerMargin(0.05);
    // ?置距??片右端距?
    domainAxis.setUpperMargin(0.05);
    plot.setDomainAxis(domainAxis);
    plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
    plot.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT); return chart;
    }
    }