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);
}
}