分享
 
 
 

学习JFreeChart(一)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

最近由于项目需要,开始学习JFreeChart和iText,在网上找了一下相关的资料不是很多,特别是JFreeChart在官方文档上没有像iText那样详尽的说明及例子,而且官方的demo只有一个jar文件,里面也比较乱,不知道从什么地方下手,在网上找了几个例子,开始循序渐进的学吧!

第一个例子是个台湾人写的,很多的名词都是用的台湾说法,读过侯捷先生翻译的书的朋友应该有很深的体会!学习任何一个开源的项目第一个任务就是配环境,

JFreeChart 首頁:

http://www.jfree.org/jfreechart/

JFreeChart API:

http://www.jfree.org/jfreechart/javadoc/

目前的版本:jfreechart-1.0.0

具体的安装和classpath的配置就不多说了

上面就是该例子要生成的柱状图!代码如下:

package HelloJChart;

import java.awt.Dimension;

import javax.swing.JFrame;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartPanel;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.data.category.CategoryDataset;

import org.jfree.data.category.DefaultCategoryDataset;

public class HelloBarChart extends JFrame{

public HelloBarChart(){

CategoryDataset dataset = createDataset();

JFreeChart chart = createChart(dataset);

chart = customizeChart(chart);

ChartPanel chartPanel = new ChartPanel(chart);

chartPanel.setPreferredSize(new Dimension(500, 270));

getContentPane().add(chartPanel);

pack();

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args){

new HelloBarChart();

}

private CategoryDataset createDataset(){

// row keys...

String series1 = "First";

String series2 = "Second";

String series3 = "Third";

// 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...

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

dataset.addValue(1.5, series1, category1);

dataset.addValue(4.2, series1, category2);

dataset.addValue(3.0, series1, category3);

dataset.addValue(5.0, series1, category4);

dataset.addValue(5.0, series1, category5);

dataset.addValue(5.5, series2, category1);

dataset.addValue(7.8, series2, category2);

dataset.addValue(6.0, series2, category3);

dataset.addValue(8.0, series2, category4);

dataset.addValue(4.0, series2, category5);

dataset.addValue(4.0, series3, category1);

dataset.addValue(3.0, series3, category2);

dataset.addValue(2.0, series3, category3);

dataset.addValue(3.0, series3, category4);

dataset.addValue(6.0, series3, category5);

return dataset;

}

private JFreeChart createChart(final CategoryDataset dataset){

JFreeChart chart = ChartFactory.createBarChart(

"Hello Bar Chart", // chart title

"Category", // domain axis label

"Value", // range axis label

dataset, // data

PlotOrientation.VERTICAL, // orientation

true, // include legend

true, // tooltips?

false // URLs?

);

return chart;

}

private JFreeChart customizeChart(final JFreeChart chart){

return chart;

}

}

要建立一個JFreeChart的圖形主要有三個步驟

建立一個擁有資料的DataSet 用DataSet創造JFreeChart 對JFreeChart作一些自訂的設計 顯示JFreeChart 第一步:建立DataSet

BarChart使用的DataSet接口org.jfree.data.CategoryDataset的DataSet。

有兩種方式來建立CategoryDataSet

使用CategoryDataSet的子类org.jfree.data.DefaultCategoryDataset,再用addValue()把資料加入DataSet中 建立包含數值的二維陣列,再使用org.jfree.data.DatasetUtilities的createCategoryDataset() 使用DefaultCategoryDataSet

DefaultCategoryDataSet class:

public void addValue(double value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

public void addValue(java.lang.Number value, java.lang.Comparable rowKey, java.lang.Comparable columnKey)

value - the value

rowKey - the row key

columnKey - the column key

参照前面的createDataset方法!

使用org.jfree.data.DatasetUtilities

org.jfree.data.DatasetUtilities class:

public static CategoryDataset createCategoryDataset(String rowKeyPrefix, String columnKeyPrefix, java.lang.Number[][] data)

public static CategoryDataset createCategoryDataset(String[] rowKeys, String[] columnKeys, double[][] data)

public static CategoryDataset createCategoryDataset(String rowKey, KeyedValues rowData)

rowKeyPrefix - the row key prefix.

columnKeyPrefix - the column key prefix.

rowKeys - the row keys.

columnKeys - the column keys.

data - the data.

private CategoryDataset createDataset(){

double[][] data = new double[][]{{1.0, 43.0, 35.0, 58.0, 54.0, 77.0, 71.0, 89.0}

, {54.0, 75.0, 63.0, 83.0, 43.0, 46.0, 27.0, 13.0}

, {41.0, 33.0, 22.0, 34.0, 62.0, 32.0, 42.0, 34.0}

};

return DatasetUtilities.createCategoryDataset("Series ", "Factor ", data);

}

第二步:創造JFreeChart

要用DataSet創造出一個JFreeChart類別,我們並不直接實體化出一個JFreeChart實體,而是使用ChartFactory類別裡面的方法。

ChartFactory class:

public static JFreeChart createBarChart(java.lang.String title,

java.lang.String categoryAxisLabel,

java.lang.String valueAxisLabel,

CategoryDataset data,

PlotOrientation orientation,

boolean legend,

boolean tooltips,

boolean urls)

title - the chart title.

categoryAxisLabel - the label for the category axis.

valueAxisLabel - the label for the value axis data - the dataset for the chart.

orientation - the plot orientation (PlotOrientation.HORIZONTAL or PlotOrientation.VERTICAL).

legend - a flag specifying whether or not a legend is required.

tooltips - configure chart to generate tool tips?

urls - configure chart to generate URLs?

private JFreeChart createChart(final CategoryDataset dataset){

JFreeChart chart = ChartFactory.createBarChart(

"Hello Bar Chart", // 题目

"Category", //行名称

"Value", // 列名称

dataset, // 数据

PlotOrientation.VERTICAL, // 横向,纵向

true, // 图例

true, // 柱状说明

false // URLs?

);

return chart;

}

第三步:修飾JFreeChart

這個範例中並沒有對JFreeChart作修飾。

private JFreeChart customizeChart(final JFreeChart chart){

return chart;

}

第四步:顯示JFreeChart

ChartPanel是一個繼承JPanel的類別,負責把JFreeChart在應用程式中顯示出來。

我們只要把JFreeChart當成參數傳給ChartPanel的建構子。造出ChartPanel的實體後,設定大小,再當成一般的Panel放入ContentPane中就可以了。

ChartPanel class:

public ChartPanel(JFreeChart chart)

public ChartPanel(JFreeChart chart, boolean useBuffer)

public ChartPanel(JFreeChart chart,

boolean properties,

boolean save,

boolean print,

boolean zoom,

boolean tooltips)

public ChartPanel(JFreeChart chart,

int width,

int height,

int minimumDrawWidth,

int minimumDrawHeight,

int maximumDrawWidth,

int maximumDrawHeight,

boolean useBuffer,

boolean properties,

boolean save,

boolean print,

boolean zoom,

boolean tooltips)

chart - the chart.

useBuffer - a flag controlling whether or not an off-screen buffer is used.

properties - a flag indicating whether or not the chart property editor should be available via the popup menu.

save - a flag indicating whether or not save options should be available via the popup menu.

print - a flag indicating whether or not the print option should be available via the popup menu.

zoom - a flag indicating whether or not zoom options should be added to the popup menu.

tooltips - a flag indicating whether or not tooltips should be enabled for the chart.

width - the preferred width of the panel.

height - the preferred height of the panel.

minimumDrawWidth - the minimum drawing width.

minimumDrawHeight - the minimum drawing height.

maximumDrawWidth - the maximum drawing width.

maximumDrawHeight - the maximum drawing height.

public HelloBarChart(){

CategoryDataset dataset = createDataset();

JFreeChart chart = createChart(dataset);

chart = customizeChart(chart);

ChartPanel chartPanel = new ChartPanel(chart);

chartPanel.setPreferredSize(new Dimension(500, 270));

getContentPane().add(chartPanel);

pack();

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

至此第一个例子已经学习完毕,基本了解了JFreeChart的一些基本技术!下面再学习一个柱状图的例子

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有