sumstatusapplet.java
来自「jfreechart不错的教程例子谢谢!」· Java 代码 · 共 410 行
JAVA
410 行
package org.jfree.chart.demo;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Locale;
import javax.swing.JApplet;
import javax.swing.JTabbedPane;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryToolTipGenerator;
import org.jfree.chart.labels.StandardPieItemLabelGenerator;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.Hour;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.util.Rotation;
/*
* Created on 2004-8-5
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
public class SumStatusApplet extends JApplet {
private static String[] keys=new String[]{"keys1","keys2","keys3","keys4","keys5","keys6","keys7","keys8","keys9","keys10","keys11","keys12"};
private static String[] series=new String[]{"一","二","三","四","五","六","七","八","九","十","十一","十二"};
private static String[] dkeys=new String[]{"2007-01-01","2007-02-01","2007-03-01"};//,"2007-04-01","2007-05-01","2007-06-01","2007-07-01","2007-08-01","2007-09-01","2007-10-01","2007-11-01","2007-12-01"};
private static String[] dseries=new String[]{"dseries1","dseries2","dseries3"};
private static String[] values=new String[]{"100","200","300","400","230","200","260","180","120","134","165","270"};
private static String[] dvalues=new String[]{"101","20","325","40","515","600","70","80","941","1001","101","12"};
private static Color[] colors;//=new Color[]{000000};
private static String title="标题";
private static String subject="子标题";
private static String type="类型";
public void init() {
colors = new Color[] { Color.red, Color.green, Color.blue, Color.black, Color.magenta, Color.yellow };
if (getParameter("title") != null)
title = getParameter("title");
else
title = "";
if (getParameter("subject") != null)
subject = getParameter("subject");
else
subject = "";
if (getParameter("xytype") != null)
type = getParameter("xytype");
else
type = "";
if (getParameter("keys") != null)
keys = getParameter("keys").split("|");// ArrayUtil.stringToArray(getParameter("keys"), "|");
if (getParameter("values") != null)
values = getParameter("values").split("|");//ArrayUtil.intToArray(getParameter("values"), "|");
if (getParameter("series") != null)
series = getParameter("series").split("|");//ArrayUtil.stringToArray(getParameter("series"), "|");
if (getParameter("dkeys") != null)
dkeys = getParameter("dkeys").split("|");//ArrayUtil.stringToArray(getParameter("dkeys"), "|");
if (getParameter("dvalues") != null)
dvalues = getParameter("dvalues").split("|");//ArrayUtil.intToArray(getParameter("dvalues"), "|");
if (getParameter("dseries") != null)
dseries = getParameter("dseries").split("|");//ArrayUtil.stringToArray(getParameter("dseries"), "|");
}
public void start() {
JTabbedPane tabs = new JTabbedPane();
XYDataset dataset2 = createXYDataset();
JFreeChart chart2 = createXYChart(dataset2);
ChartPanel chartPanel2 = new ChartPanel(chart2);
tabs.add("趋势图", chartPanel2);
CategoryDataset dataset = createBarDataset();
JFreeChart chart = createBarChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
tabs.add("柱状图", chartPanel);
PieDataset dataset1 = createPieDataset();
JFreeChart chart1 = createPieChart(dataset1);
ChartPanel chartPanel1 = new ChartPanel(chart1);
tabs.add("饼状图", chartPanel1);
getContentPane().add(tabs);
}
private CategoryDataset createBarDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < series.length; i++) {
dataset.addValue(format(Integer.parseInt(values[i]) / 100.0),
series[i], keys[0]);
}
return dataset;
}
private PieDataset createPieDataset() {
DefaultPieDataset result = new DefaultPieDataset();
for (int j = 0; j < series.length; j++) {
result.setValue(series[j],
format(Integer.parseInt(values[j]) / 100.0));
}
return result;
}
private XYDataset createXYDataset() {
TimeSeriesCollection dataset = new TimeSeriesCollection();
if (dkeys[0].length() > 11) {
SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date date = null;
for (int j = 0; j < dseries.length; j++) {
TimeSeries t1 = new TimeSeries(dseries[j], Hour.class);
for (int i = 0; i < dkeys.length - 1; i++) {
try {
date = df2.parse(dkeys[i]);
} catch (Exception e) {
}
java.util.Calendar cal = new java.util.GregorianCalendar();
cal.setTime(date);
Hour h = new Hour(date);
t1.add(h, format(Integer.parseInt(dvalues[i
* dseries.length + j]) / 100.0));
}
dataset.addSeries(t1);
}
} else {
for (int j = 0; j < dseries.length; j++) {
SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
TimeSeries t1 = new TimeSeries(dseries[j]);
for (int i = 0; i < dkeys.length - 1; i++) {
try {
date = df1.parse(dkeys[i]);
} catch (Exception e) {
}
Day day = new Day(date);
System.out.println("i:"+i+" j:"+j + "总:"+(i* dseries.length + j));
t1.add(day, format(Integer.parseInt(dvalues[i* dseries.length + j]) / 100.0));
}
dataset.addSeries(t1);
}
}
dataset.setDomainIsPointsInTime(true);
return dataset;
}
private JFreeChart createXYChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createTimeSeriesChart(title + "("
+ type + ")", // chart title
subject, // domain axis label
"现金额(元)", // range axis label
dataset, // data
true, // include legend
true, // tooltips?
false // URLs?
);
chart.setBackgroundPaint(Color.white);
LegendTitle sl = (LegendTitle) chart.getLegend();
sl.setNotify(true);
sl.setItemFont(new Font("\u5b8b\u4f53", Font.TRUETYPE_FONT, 12));
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
//plot.setAxisOffset(new Spacer(Spacer.ABSOLUTE, 5.0, 5.0, 5.0, 5.0));
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
// set the range axis to display integers only...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
XYItemRenderer renderer = chart.getXYPlot().getRenderer();
// 显示点上的数值
//renderer.setBaseLabelGenerator(new StandardXYLabelGenerator());
//renderer.setItemLabelsVisible(true);
int size = dseries.length;
int yu = size % colors.length;
int loop = size / colors.length;
for (int k = 0; k < loop; k++) {
for (int i = 0; i < colors.length; i++) {
GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, colors[i],
0.0f, 0.0f, colors[i]);
renderer.setSeriesPaint((k * colors.length + i), gp0);
}
}
for (int i = 0; i < yu; i++) {
GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, colors[i], 0.0f,
0.0f, colors[i]);
renderer.setSeriesPaint(loop * colors.length + i, gp1);
}
StandardXYToolTipGenerator g = new StandardXYToolTipGenerator(
StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
new SimpleDateFormat("yyyy-MM-dd"), new DecimalFormat("0.00"));
renderer.setItemLabelFont(new Font("\u5b8b\u4f53", Font.TRUETYPE_FONT,
12));
renderer.setToolTipGenerator(g);
if (renderer instanceof StandardXYItemRenderer) {
StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer;
//rr.setPlotShapes(true);
rr.setShapesFilled(true);
for (int k = 0; k < dseries.length; k++) {
renderer.setSeriesStroke(k, new BasicStroke(2.0f));
}
}
SimpleDateFormat sf = null;
if (dkeys[0].length() > 11)
sf = new SimpleDateFormat("HH:mm");
else
sf = new SimpleDateFormat("yyyy.MM.dd");
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(sf);
axis.setLabelFont(new Font("\u5b8b\u4f53", Font.TRUETYPE_FONT, 12));
return chart;
}
private JFreeChart createBarChart(CategoryDataset dataset) {
JFreeChart chart = ChartFactory.createBarChart3D(title, // chart title
subject, // domain axis label
"现金额(元)", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);
// set the background color for the chart...
chart.setBackgroundPaint(Color.white);
LegendTitle sl = (LegendTitle) chart.getLegend();
//sl.setDisplaySeriesShapes(true);
sl.setItemFont(new Font("\u5b8b\u4f53", Font.TRUETYPE_FONT, 12));
// get a reference to the plot for further customisation...
CategoryPlot plot = chart.getCategoryPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
// set the range axis to display integers only...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setNumberFormatOverride(NumberFormat
.getInstance(Locale.CHINA));
// disable bar outlines...
BarRenderer renderer = (BarRenderer) plot.getRenderer();
//鼠标移过时的提示
StandardCategoryToolTipGenerator g = new StandardCategoryToolTipGenerator(
"({0}, {1}) = {2}", new DecimalFormat("0.00"));
renderer.setToolTipGenerator(g);
//柱形上显示数值
//带小数,两位
NumberFormat nf = NumberFormat.getInstance(Locale.CHINA);
DecimalFormat df = (DecimalFormat) nf;
df.applyPattern("0.00");
//StandardCategoryLabelGenerator scg = new StandardCategoryLabelGenerator(StandardCategoryLabelGenerator.DEFAULT_LABEL_FORMAT_STRING, df);
//renderer.setBaseLabelGenerator(scg);
renderer.setItemLabelsVisible(true);
renderer.setDrawBarOutline(true);
//renderer.setItemURLGenerator(new StandardCategoryURLGenerator("xy_chart.jsp","series","section"));
//renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());
int size = series.length;
int yu = size % colors.length;
int loop = size / colors.length;
for (int k = 0; k < loop; k++) {
for (int i = 0; i < colors.length; i++) {
GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, colors[i],
0.0f, 0.0f, colors[i]);
renderer.setSeriesPaint((k * colors.length + i), gp0);
}
}
for (int i = 0; i < yu; i++) {
GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, colors[i], 0.0f,
0.0f, colors[i]);
renderer.setSeriesPaint(loop * colors.length + i, gp1);
}
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setCategoryLabelPositions(CategoryLabelPositions
.createUpRotationLabelPositions(Math.PI / 6.0));
// OPTIONAL CUSTOMISATION COMPLETED.
return chart;
}
private JFreeChart createPieChart(PieDataset dataset) {
JFreeChart chart = ChartFactory.createPieChart3D(title, // title
dataset, // data
true, // include legend
true, false);
chart.setBackgroundPaint(Color.white);
LegendTitle sl = (LegendTitle) chart.getLegend();
sl.setItemFont(new Font("\u5b8b\u4f53", Font.TRUETYPE_FONT, 12));
NumberFormat nf = NumberFormat.getInstance(Locale.CHINA);
DecimalFormat df = (DecimalFormat) nf;
df.applyPattern("0.00");
DecimalFormat df2 = (DecimalFormat) nf;
df2.applyPattern("0.00%");
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setLabelGenerator(new StandardPieItemLabelGenerator("{0} = {2}",
df, df));
plot.setBackgroundPaint(Color.lightGray);
plot.setStartAngle(290);
plot.setDirection(Rotation.CLOCKWISE);
plot.setForegroundAlpha(0.5f);
plot.setNoDataMessage("没有数据");
plot.setIgnoreNullValues(false);
int size = series.length;
int yu = size % colors.length;
int loop = size / colors.length;
for (int k = 0; k < loop; k++) {
for (int i = 0; i < colors.length; i++) {
GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, colors[i],
0.0f, 0.0f, colors[i]);
plot.setSectionPaint((k * colors.length + i), gp0);
}
}
for (int i = 0; i < yu; i++) {
GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, colors[i], 0.0f,
0.0f, colors[i]);
plot.setSectionPaint((loop * colors.length + i), gp1);
}
return chart;
}
private static Double format(double value) {
DecimalFormat df = new DecimalFormat("0.00");
return Double.valueOf(df.format(value));
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?