 package chart;
/**
* JFreeChartDemo
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* More than 150 demo applications are included with the JFreeChart
* Developer Guide. For more information, see:
*
* http://www.jfree.org/jfreechart/devguide.html
*/
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Stroke;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
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.axis.TickUnitSource;
import org.jfree.chart.labels.StandardXYItemLabelGenerator;
import org.jfree.chart.labels.XYItemLabelGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RefineryUtilities;
/**
* @author John B. Matthews
*/
public class JFreeChartDemo extends JFrame {
private static final int MAX = 8;
private static final Random random = new Random();
/**
* Construct a new frame
*
* @param title the frame title
*/
public JFreeChartDemo(String title) {
super(title);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final DefaultXYDataset dataset = new DefaultXYDataset();
dataset.addSeries("Series0", createSeries(0));
dataset.addSeries("Series1", createSeries(1));
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart, false);
chartPanel.setPreferredSize(new Dimension(640, 480));
this.add(chartPanel, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel();
JButton addButton = new JButton("Add Series");
buttonPanel.add(addButton);
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int n = dataset.getSeriesCount();
dataset.addSeries("Series" + n, createSeries(n));
}
});
JButton remButton = new JButton("Remove Series");
buttonPanel.add(remButton);
remButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int n = dataset.getSeriesCount() - 1;
dataset.removeSeries("Series" + n);
}
});
this.add(buttonPanel, BorderLayout.SOUTH);
}
/**
* Create a series
*
* @ return the series
*/
private static double[][] createSeries(int mean) {
double[][] series = new double[2][MAX];
for (int i = 0; i < MAX; i++) {
series[0][i] = (double) i;
series[1][i] = mean + random.nextGaussian() / 2;
}
return series;
}
/**
* Create a chart.
*
* @param dataset the dataset
* @return the chart
*/
private static JFreeChart createChart(XYDataset dataset) {
// create the chart...
JFreeChart chart = ChartFactory.createXYLineChart(
"Serial Data", // chart title
"Domain", // domain axis label
"Rannge", // range axis label
dataset, // series0
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips?
false // URLs?
);
// set chart background
chart.setBackgroundPaint(Color.white);
// set a few custom plot features
XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(new Color(0xffffd0));
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlinePaint(Color.lightGray);
plot.setRangeGridlinePaint(Color.lightGray);
// set the plot's axes to display integers
TickUnitSource ticks = NumberAxis.createIntegerTickUnits();
NumberAxis domain = (NumberAxis) plot.getDomainAxis();
domain.setStandardTickUnits(ticks);
NumberAxis range = (NumberAxis) plot.getRangeAxis();
range.setStandardTickUnits(ticks);
// render shapes and lines
XYLineAndShapeRenderer renderer =
new XYLineAndShapeRenderer(true, true);
plot.setRenderer(renderer);
renderer.setBaseShapesVisible(true);
renderer.setBaseShapesFilled(true);
// set the renderer's stroke
Stroke stroke = new BasicStroke(
3f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL);
renderer.setBaseOutlineStroke(stroke);
// label the points
NumberFormat format = NumberFormat.getNumberInstance();
format.setMaximumFractionDigits(2);
XYItemLabelGenerator generator =
new StandardXYItemLabelGenerator(
StandardXYItemLabelGenerator.DEFAULT_ITEM_LABEL_FORMAT,
format, format);
renderer.setBaseItemLabelGenerator(generator);
renderer.setBaseItemLabelsVisible(true);
return chart;
}
/** Main method */
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFreeChartDemo demo = new JFreeChartDemo("JFreeChartDemo");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
});
}
}
|