/* ----------------------------------
* SelectionDemo7ScatterRenderer.java
* ----------------------------------
* (C) Copyright 2013, by Object Refinery Limited.
*
*/
package org.jfree.chart.demo.selection;
import java.awt.Color;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.panel.selectionhandler.EntitySelectionManager;
import org.jfree.chart.panel.selectionhandler.FreeRegionSelectionHandler;
import org.jfree.chart.panel.selectionhandler.MouseClickSelectionHandler;
import org.jfree.chart.panel.selectionhandler.RegionSelectionHandler;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.renderer.category.ScatterRenderer;
import org.jfree.chart.renderer.item.DefaultShapeIRS;
import org.jfree.chart.demo.ApplicationFrame;
import org.jfree.chart.ui.RectangleInsets;
import org.jfree.chart.ui.WindowUtils;
import org.jfree.data.extension.DatasetSelectionExtension;
import org.jfree.data.extension.impl.CategoryCursor;
import org.jfree.data.extension.impl.CategoryDatasetSelectionExtension;
import org.jfree.data.extension.impl.DatasetExtensionManager;
import org.jfree.data.general.Dataset;
import org.jfree.data.statistics.DefaultMultiValueCategoryDataset;
import org.jfree.data.statistics.MultiValueCategoryDataset;
/*
* based on ScatterRendererDemo1
*/
public class SelectionDemo7ScatterRenderer extends ApplicationFrame {
/**
* Creates a new demo instance.
*
* @param title the frame title.
*/
public SelectionDemo7ScatterRenderer(String title) {
super(title);
JPanel chartPanel = createDemoPanel();
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private static List<Number> listOfValues(double[] values) {
List<Number> result = new ArrayList<Number>();
for (int i = 0; i < values.length; i++) {
result.add(new Double(values[i]));
}
return result;
}
/**
* Creates a sample dataset.
*
* @return A dataset.
*/
private static MultiValueCategoryDataset createDataset() {
DefaultMultiValueCategoryDataset dataset
= new DefaultMultiValueCategoryDataset();
dataset.add(listOfValues(new double[] { 1.0, 2.0, 3.0 }), "Series 1",
"C1");
dataset.add(listOfValues(new double[] { 1.2, 2.2, 3.2 }), "Series 1",
"C2");
dataset.add(listOfValues(new double[] { 1.4, 2.4, 3.4 }), "Series 1",
"C3");
dataset.add(listOfValues(new double[] { 1.0, 2.1, 3.2 }), "Series 1",
"C1");
dataset.add(listOfValues(new double[] { 1.2, 2.15, 3.5 }), "Series 1",
"C2");
dataset.add(listOfValues(new double[] { 1.4, 2.5, 3.2 }), "Series 1",
"C3");
dataset.add(listOfValues(new double[] { 1.4, 3.0, 3.2 }), "Series 1",
"C3");
dataset.add(listOfValues(new double[] { 1.4, 3.0 }), "Series 2", "C1");
dataset.add(listOfValues(new double[] { 1.0, 3.0 }), "Series 2", "C1");
dataset.add(listOfValues(new double[] { 1.2, 3.2 }), "Series 2", "C2");
dataset.add(listOfValues(new double[] { 1.4, 3.6 }), "Series 2", "C3");
dataset.add(listOfValues(new double[] { 1.2, 3.1 }), "Series 2", "C1");
dataset.add(listOfValues(new double[] { 1.4, 3.4 }), "Series 2", "C2");
dataset.add(listOfValues(new double[] { 1.5, 3.6 }), "Series 2", "C3");
return dataset;
}
/**
* Creates a chart.
*
* @param dataset the dataset.
*
* @return A chart.
*/
private static JFreeChart createChart(final MultiValueCategoryDataset
dataset, final DatasetSelectionExtension<CategoryCursor
<String, String>> ext) {
ScatterRenderer r = new ScatterRenderer();
CategoryPlot plot = new CategoryPlot(dataset, new CategoryAxis(
"Category"), new NumberAxis("Value"), r);
plot.setBackgroundColor(Color.LIGHT_GRAY);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
plot.setAxisOffset(new RectangleInsets(4, 4, 4, 4));
JFreeChart chart = new JFreeChart("ScatterRendererDemo1", plot);
ChartUtilities.applyCurrentTheme(chart);
//register the plot
ext.addChangeListener(plot);
//illustrates the usage of a shape item rendering strategy
final CategoryCursor<String, String> cursor = new CategoryCursor<String,
String>();
r.setShapeIRS(new DefaultShapeIRS(r) {
private static final long serialVersionUID = 1L;
@Override
public Shape getItemShape(int row, int column) {
cursor.setPosition((String)dataset.getRowKey(row),
(String) dataset.getColumnKey(column));
if (ext.isSelected(cursor)) {
return new Rectangle2D.Double(-10.0, -10.0, 20.0, 20.0);
} else {
return super.getItemShape(row, column);
}
}
});
return chart;
}
/**
* Creates a panel for the demo (used by SuperDemo.java).
*
* @return A panel.
*/
public static JPanel createDemoPanel() {
MultiValueCategoryDataset dataset = createDataset();
//extend dataset and add selection change listener for the demo
DatasetSelectionExtension<CategoryCursor<String, String>>
datasetExtension = new CategoryDatasetSelectionExtension
<String, String>(dataset);
//standard setup
JFreeChart chart = createChart(dataset, datasetExtension);
ChartPanel panel = new ChartPanel(chart);
panel.setMouseWheelEnabled(true);
//add a selection handler with shift modifier for clicking
RegionSelectionHandler selectionHandler
= new FreeRegionSelectionHandler();
panel.addMouseHandler(selectionHandler);
panel.addMouseHandler(new MouseClickSelectionHandler());
panel.removeMouseHandler(panel.getZoomHandler());
// add a selection manager
DatasetExtensionManager dExManager = new DatasetExtensionManager();
dExManager.registerDatasetExtension(datasetExtension);
panel.setSelectionManager(new EntitySelectionManager(panel,
new Dataset[] { dataset }, dExManager));
return panel;
}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
SelectionDemo7ScatterRenderer demo = new SelectionDemo7ScatterRenderer(
"JFreeChart: ScatterRendererDemo1.java");
demo.pack();
WindowUtils.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}