在一个jsp页面中,已经从数据库中读出了收入和支出的所有数据,并且已经累加完成计算
假设
<%
int a=100;//总收入
int b=50;//总支出%>
现在根据a和b的值动态生成一个柱状图对比,求教达人

解决方案 »

  1.   


    package com;   
      
    import java.awt.Color;   
    import java.awt.Dimension;   
    import java.awt.Font;   
    import java.awt.GradientPaint;   
      
    import javax.swing.JPanel;   
      
    import org.jfree.chart.ChartFactory;   
    import org.jfree.chart.ChartPanel;   
    import org.jfree.chart.ChartUtilities;
    import org.jfree.chart.JFreeChart;   
    import org.jfree.chart.axis.CategoryAxis;   
    import org.jfree.chart.axis.CategoryLabelPositions;   
    import org.jfree.chart.axis.NumberAxis;   
    import org.jfree.chart.labels.StandardCategorySeriesLabelGenerator;   
    import org.jfree.chart.plot.CategoryPlot;   
    import org.jfree.chart.plot.PlotOrientation;   
    import org.jfree.chart.renderer.category.BarRenderer;   
    import org.jfree.data.category.CategoryDataset;   
    import org.jfree.data.category.DefaultCategoryDataset;   
    import org.jfree.ui.ApplicationFrame;   
    import org.jfree.ui.RefineryUtilities;   import java.io.*;
      
    public class BarChartDemo1 extends ApplicationFrame {   
      
      public BarChartDemo1(String s) {   
        super(s);   
        JPanel jpanel = createDemoPanel();   
        jpanel.setPreferredSize(new Dimension(700, 550));   
        setContentPane(jpanel);   
      }   
      
      private static CategoryDataset createDataset() {   
        String s = "每日PV";   
        String s1 = "每日IP数";   
        String s2 = "注册用户数";   
        String s3 = "A网站";   
        String s4 = "B网站";   
        String s5 = "C网站";   
        String s6 = "D网站";   
        String s7 = "E网站";   
        DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();   
        
        //A-E网站的 每日PV
        defaultcategorydataset.addValue(-1.0D, s, s3);   
        defaultcategorydataset.addValue(4D, s, s4);   
        defaultcategorydataset.addValue(3D, s, s5);   
        defaultcategorydataset.addValue(5D, s, s6);   
        defaultcategorydataset.addValue(5D, s, s7);  
        
        defaultcategorydataset.addValue(5D, s1, s3);   
        defaultcategorydataset.addValue(7D, s1, s4);   
        defaultcategorydataset.addValue(6D, s1, s5);   
        defaultcategorydataset.addValue(8D, s1, s6);   
        defaultcategorydataset.addValue(4D, s1, s7);
        
        defaultcategorydataset.addValue(4D, s2, s3);   
        defaultcategorydataset.addValue(3D, s2, s4);   
        defaultcategorydataset.addValue(2D, s2, s5);   
        defaultcategorydataset.addValue(3D, s2, s6);   
        defaultcategorydataset.addValue(6D, s2, s7);   
        return defaultcategorydataset;   
      }   
      
      private static JFreeChart createChart(CategoryDataset categorydataset) {   
    //名字,横坐标名字,纵坐标名字,图例显示的方式(横着显示,还是竖着),
        JFreeChart jfreechart = ChartFactory.createBarChart("Bar Chart Demo 1", "网站", "数值",   
            categorydataset, PlotOrientation.VERTICAL, true, true, false);   
        
        CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();   
        
        //设置背景十字线是否阴影显示
        categoryplot.setDomainGridlinesVisible(false);  
        
        //点的时候有线
        categoryplot.setRangeCrosshairVisible(true);   
        categoryplot.setRangeCrosshairPaint(Color.red); 
            //返回数轴
        NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();   
        
        //numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); 
        numberaxis.setStandardTickUnits(NumberAxis.createStandardTickUnits()); 
        
        BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer();  
        
        barrenderer.setBaseItemLabelFont(new Font("宋体", Font.ITALIC, 12));   
        
        barrenderer.setSeriesItemLabelFont(1, new Font("宋体", Font.ITALIC, 12));   
       
        
        
        /*增加设置字体的代码*/
        CategoryAxis domainAxis = categoryplot.getDomainAxis();    /*------设置X轴坐标上的文字-----------*/
        domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 18));    /*------设置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));    /*------这句代码解决了底部汉字乱码的问题-----------*/
        jfreechart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
        
        barrenderer.setDrawBarOutline(false);   
        GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue, 0.0F, 0.0F, new Color(   
            0, 0, 64));   
        GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green, 0.0F, 0.0F,   
            new Color(0, 64, 0));   
        GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.red, 0.0F, 0.0F, new Color(   
            64, 0, 0));  
        
        barrenderer.setSeriesPaint(0, gradientpaint);   
        barrenderer.setSeriesPaint(1, gradientpaint1);   
        barrenderer.setSeriesPaint(2, gradientpaint2); 
        
        barrenderer.setLegendItemToolTipGenerator(new StandardCategorySeriesLabelGenerator(   
            "Tooltip: {0}"));  
        
        CategoryAxis categoryaxis = categoryplot.getDomainAxis();   
        categoryaxis.setCategoryLabelPositions(CategoryLabelPositions   
            .createUpRotationLabelPositions(0.52359877559829882D));   
        return jfreechart;   
      }   
      
      public static JPanel createDemoPanel() {   
        JFreeChart jfreechart = createChart(createDataset());  
        
        saveFileAsJPG(jfreechart,"f:\\jfreechart\\barchart.jpg",700,550);
        return new ChartPanel(jfreechart);   
      }   
      
      public static void main(String args[]) {   
        BarChartDemo1 barchartdemo1 = new BarChartDemo1("黑体JFreeChart: BarChartDemo1.java");   
        barchartdemo1.pack();   
        RefineryUtilities.centerFrameOnScreen(barchartdemo1);   
        barchartdemo1.setVisible(true);   
      }   
      
      public static void saveFileAsJPG(JFreeChart chart,String filename,int width,int height)
      {
      FileOutputStream fos = null;
      
      try
      {
      fos = new FileOutputStream(filename);
      ChartUtilities.writeChartAsJPEG(fos, chart, width, height);
      }
      catch(IOException e)
      {
      e.printStackTrace();
      }  
      }
    }  看看吧 别忘了jar包
      

  2.   

    4楼的例子如何与jsp结合了用呢
      

  3.   

    <%
    String filename = ServletUtilities.saveChartAsJPEG(JFreeChart chart,
                                                   int width,
                                                   int height,
                                                   ChartRenderingInfo info,
                                                   javax.servlet.http.HttpSession session)
     
    %><table width="100%">  
        <tr>  
            <td align="center">  
                <!-- 生成图形 -->  
                <img src="<%= URL %>" width=800 height=700 border=0 usemap="#<%= filename %>" alt="">  
            </td>  
        </tr>  
    </table>  这样呢