一:jfreechart介绍) H$ B% S' _( E! m; N i) O
jfreechart是一个免费建树图片的java工具.可以建树如下图形:$ B. J% T- \! k' K& Y
饼图版本为0.98
4 D0 W, u0 J7 ^& f 但愿获得具体的信息或下载jfreechart请访谒如下站点:6 w% U; C& L, a X, O
http://www.jfree.org/jfreechart /$ O( Y+ ^! ?+ l5 p7 ?1 }( \
二:出格声名:. v4 ^ _3 L; E' s1 ~, [5 ^2 {
jfreechart是一个开源项目,可是文档是需要40美金去采办的。: {, Y! v# ^' I# ~& t6 F
还有一个很主要的问题,jfreechart如不美观使用中文,他使用的默认字体
6 Q. ?! O! `; o9 b 显示出来的中文会很恍惚,你可能需要改削源代码。$ F$ i9 S! h! z9 A5 r* y
下面我就举几个简单的例子声名一下若何使用jfreechart建树图片
) z4 F% ~3 N3 C$ N- j* j/ ~! } 在开发中有可能会导入以下的类4 C% ~ d7 e7 Q
import com.jrefinery.chart.ChartFactory;) B) F7 d8 e1 d i8 Z4 U$ {4 H/ _
import com.jrefinery.chart.ChartUtilities;8 [1 h) O0 v! M& F
import com.jrefinery.chart.JFreeChart;9 U" W5 o8 }3 U6 W# y
import com.jrefinery.chart.TextTitle;
5 I5 I' D$ H8 D, w; M/ ? import com.jrefinery.chart.axis.NumberAxis;% | {9 d& R' v+ p% K
import com.jrefinery.chart.plot.CategoryPlot;
- e* I/ c& L5 k import com.jrefinery.chart.plot.PiePlot;: h5 f! a6 Q0 b$ Q* [4 k
import com.jrefinery.data.Day;, L4 f' W: O/ v& H* ?
import com.jrefinery.data.DefaultCategoryDataset;
' w* X6 n, D" C9 c3 n" o import com.jrefinery.data.DefaultPieDataset;( J8 u5 ]. ~ V
import com.jrefinery.data.TimeSeries;) g4 X( }. v# l
import com.jrefinery.data.TimeSeriesCollection;9 J Z! s1 p Q0 K( k3 e
import com.jrefinery.data.TimeSeriesDataPair;0 R* o% i6 l1 `5 m( Q
在0.98往后包由com.jrefinery.*改变为:org.jfree1 C/ N0 o: h4 I
三:建树饼图
, E7 a" |! r3 D! |5 W //图片问题
$ z3 y# G6 ]+ f5 M9 i String title = "空调2002年市场据有率";2 H) q _$ V. g Z* c) W; R* D
//设定数据源% ]9 D3 T% o$ D+ K% S
DefaultPieDataset piedata = http://www.qnr.cn/pc/java/xinde/201007/new DefaultPieDataset();/ O7 W: [6 h. `, q# n) C& |$ {0 s( ~& Y
//第一个参数为名称,第二个参数是double数
0 a3 M2 i$ }( l' M# M piedata.setValue("联想", 27.3);
6 h: x- @0 `: R: K* H piedata.setValue("长城", 12.2);
# F$ e0 v& G% e+ _9 A% Y8 r* i7 ^ piedata.setValue("海尔", 5.5);. L) S" e0 E0 E, U( }% {
piedata.setValue("美的", 17.1);( p( _4 l) t" B, O! I
piedata.setValue("松下", 9.0);
1 z2 S! p% Y. w) @% i* [ piedata.setValue("科龙", 19.0);9 x6 l: W! q: H, u/ H, D' }
//建树JFreeChart,都使用ChartFactory来建树JFreeChart,很尺度的工场设计模式
9 F' v. ?6 T. n8 O' Z3 i JFreeChart chart =
, x' \% d9 d R. q# m4 |% W6 n4 e ChartFactory.createPieChart(title, piedata, true, true, true); b! U' I8 i3 ?. h4 S
//设定图片问题3 p) V2 u# o2 G; [
chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15)));+ y1 j a3 v" u* u3 K0 Q0 ^1 l
//chart.addSubtitle(new TextTitle("2002财年剖析", new Font("隶书", Font.ITALIC, 12)));" t1 Z) ], f; F
//设定布景1 h! y( i: w' i _2 x! i
chart.setBackgroundPaint(Color.white);
2 e3 ^, X) K) s //chart.s6 Y) K2 R) s: J0 G+ @0 t
//饼取使用一个PiePlot& w) M- g. W- b F- O, |
PiePlot pie = (PiePlot)chart.getPlot();$ J) Y9 u2 P# C- [. o
//pie.setSectionLabelType(PiePlot.NAME_AND_PERCENT_LABELS);
6 g8 g8 g* `/ ]* ?- U$ F pie.setSectionLabelType(PiePlot.NAME_AND_VALUE_LABELS);+ N0 t1 _8 R! g. A1 d; B
//设定显示名目(名称加百分比或数值)
% R" B& q/ Q* C$ g' r" k: n9 p9 } pie.setPercentFormatString("#,###0.0#%");4 w9 H5 f! d7 C
//设定百分比显示名目$ [5 T8 b- o: Z# ] U) G3 r
pie.setBackgroundPaint(Color.white);) Y' a7 L% l1 P9 x( W- ?. C3 m2 t- p2 F
pie.setSectionLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12));# z4 h% |' V" _5 X& l( _' h
//设定布景透明度(0-1.0之间)
, M. i. Q h) E2 s0 M# [- D& Q4 _ pie.setBackgroundAlpha(0.6f);
; P! _2 p g, g' O, Y //设定前景透明度(0-1.0之间)4 ]0 O8 L+ g6 x% {! m+ G- P& f
pie.setForegroundAlpha(0.90f);: I/ v. R) N( X% f' f
//输出文件到指定目录: O" X- Y$ B! _: g8 B
String rfname = MathUtil.getRoundCode(12) + ".jpeg";) [! y6 C' a; t* f- \$ e* O8 b
String fileName = "d:/test/" + rfname;3 Y. j8 l% k) Z' X! I" l
try {
6 D" _/ N8 S% r- ] //可以保留文件为jpg或png名目。 H2 R3 Q+ m. F: V( e9 Q* y
ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600);
& \/ R! ^/ K, U, ? //第一个参数为文件名
6 ^+ C5 x) G# I8 w0 \: v //第二个参数质量
" v* ^0 u B9 F //第三个参数为哪个chart建树图片
# y* @9 J7 z. S9 g% }, d //第四个宽度
4 H- G4 B# ^; P2 \: C- L, G //第五个高度
, x+ Q. T. m( L3 x1 j7 s } catch (IOException exz) {4 Z# l7 o" S. c8 O! L+ o4 o0 N
System.out.print("....Cant’t Create image File");
* l& a! P! A: Y/ ` S# w7 f+ x }. M, h) Y% F' H3 B8 s/ z
其实使用JFreeChart建树图片很简单,分歧的的图片类型区别在于设置数据集
8 E B2 U+ ?% C$ T, X- Y2 F 四:建树曲线图1 I8 D, d2 x; G" O1 |% H; F
// create a default chart based on some sample data...
6 `5 V0 x: | V2 v- S //曲线搁问题$ d5 r7 Y: O( w7 t3 r
String title = "趋向剖析";6 i5 w9 |2 j% ^' N$ D |# j
//曲线图X轴提醒
! S& Y" t0 k, O8 g g3 c& Y String domain = "月份走势";( ]7 V6 l: R. a/ j* h
//曲线图Y轴提醒
$ ?; E( J: G4 W4 I- w2 U String range = "应收余额";+ ] r* p, E6 i F
//曲线图自问题
! X" o" r7 q' y! [& O% ?. W( s String subtitleStr = "2003财年剖析";( }# X e# C1 y+ R( q& \3 f
//建树时刻数据源' v! U6 ?) z, ~+ R2 s6 |
//每一个TimeSeries在图上是一条曲线5 t* e8 |( u B: Z0 B, ]7 f! i
TimeSeries ca = new TimeSeries("用友");/ R8 V2 [7 y/ V" c9 n
for (int i = 1999; i < 2005; i++) {$ t# R* T4 ^. D# x& k9 q
for (int mon = 0; mon < 12; mon++) {3 C$ K! z' _& _3 T4 N2 D; R
//ca.add(new Month(mon + 1, i), new Double(500 + Math.random() * 100));
7 S0 {" P& n: M, Q9 B //TimeSeriesDataPair是一个时刻点的数值浮现
6 p# w7 m3 g# b* @' t! E ca.add(
/ r, ~8 F/ t; ~- D new TimeSeriesDataPair(4 A: y+ B% Q* `5 t* y' k
new Day(1, mon + 1, i),
& \; e6 m4 u# u4 x new Double(500 + Math.random() * 100)));5 n. ?5 o7 [3 u! [9 k- h; s5 Y
}
8 y. i2 @( k3 h; }# ? } |