JFreeChart柱状图的完整实例

 

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.category.CategoryItemRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class AliHorizonBarChartDemo extends ApplicationFrame{
 
 public AliHorizonBarChartDemo(String s){
  //这里是继承自ApplicationFrame
  super(s);
  //创建Dataset
  CategoryDataset categoryDataset=createDataset();
  //创建jfreechart
  JFreeChart jfreechart=createChart(categoryDataset);
  //创建容器
  ChartPanel chartPanel=createPanel();
  //设置容器的初始大小(Dimension是用来设置尺寸的)
  chartPanel.setPreferredSize(new Dimension(400,200));//尤其注意的是panel的高度会严重影响柱体的宽度
  //下面这句是关键,控制是否显示,也就是将整个组件放入到组件中去
  /**
   * 对JFrame添加组件有两种方式:
          1)用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)
           2)建立一个Jpanel或JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容

                   面板:
               JpanelcontentPane=newJpanel();//把其它组件添加到Jpanel中;
               frame.setContentPane(contentPane); //把contentPane对象设置成为frame的内容面板
   */
     setContentPane(chartPanel);
 }
 public CategoryDataset createDataset(){
  System.out.println("========createDataSet========");
  //创建Dataset
  DefaultCategoryDataset defaultDataset=new DefaultCategoryDataset();
  //创建分类
  defaultDataset.addValue(100d, "S1","Apple" );
  defaultDataset.addValue(101d, "S1", "banana");
  defaultDataset.addValue(150d, "S1", "grape");
  defaultDataset.addValue(12d,"S1","pear");
  
  return defaultDataset;
  
 }
 public JFreeChart createChart(CategoryDataset dataset){
  System.out.println("===========createJfreechart========");
  //创建jfreechart
        JFreeChart jfreechart=ChartFactory.createBarChart("Ali's fruits","type","number",dataset,PlotOrientation.HORIZONTAL,false,true,false); 
        //设置jfreechart的背景
        System.out.println("jfreechart="+jfreechart);
        jfreechart.setBackgroundPaint(Color.yellow);
       
        //创建plot
        CategoryPlot categoryPlot=(CategoryPlot)jfreechart.getPlot();
        System.out.println("categoryPlot="+categoryPlot);
        //设置场景的背景色
        categoryPlot.setBackgroundPaint(Color.gray);
        //还可以设置场景的横向网格
        categoryPlot.setDomainGridlinePaint(Color.red);
        //设置场景横向网格的可见性,如果不设置的话则不可见
        categoryPlot.setDomainGridlinesVisible(true);
        //设置场景的竖向网格
        categoryPlot.setRangeGridlinePaint(Color.green);
        //设置最长的说明标签的显示比例
        System.out.println(categoryPlot.getDomainAxis());
        categoryPlot.getDomainAxis().setMaximumCategoryLabelWidthRatio(0.8F);
       
        //设置轴
        NumberAxis numberAxis=(NumberAxis)categoryPlot.getRangeAxis();
        //设置轴的单位
        numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
       
        //添加额外的效果(表示器)
        BarRenderer barrender=(BarRenderer)categoryPlot.getRenderer();
        //设置是否显示外框
        barrender.setDrawBarOutline(true);
        //显示每个柱子的具体值
        //下面这两句缺一不可
        barrender.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        barrender.setSeriesItemLabelsVisible(0, Boolean.TRUE);
        //添加渐变色
        GradientPaint gradientPaint=new GradientPaint(0.0f,0.0f,new Color(255,255,255),0.0f,0.0f,new Color(170,170,255));
        //给柱体上色
        barrender.setSeriesPaint(0,gradientPaint);
       return jfreechart;
 }
 public  ChartPanel createPanel(){
  JFreeChart jfreechart = createChart(createDataset());
  return new ChartPanel(jfreechart);
  
 }
 public static void main(String[] args){
  AliHorizonBarChartDemo demo=new AliHorizonBarChartDemo("ALI's bar chart");
  demo.pack();
  RefineryUtilities.centerFrameOnScreen(demo);
  demo.setVisible(true);
  demo.setDefaultCloseOperation(1);
  
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值