JMSL Chart Programmer's Guide
|
Actions >> Picking |
Picking
The pick mechanism allows MouseEvents to be associated with chart nodes. The pick mechanism follows the Java listener pattern.
The class that is to handle the pick events implements the
com.imsl.chart.PickListener
interface. This requires the implementation
of the method pickPerformed(PickEvent)
.
The PickListener is then added to a chart node, using the node's
addPickListener
method.
A pick is fired by calling the method pick(MouseEvent)
in the top-level Chart
node. Normally this is done in response to a mouse click. Mouse clicks can be
detected by implementing the MouseListener interface and adding it to the chart's
container.
Example
In this example, when a bar is clicked it toggles its color between blue and red.
A MouseListener is implemented as an inner class. Its mouseClicked
method
calls chart.pick
(MouseEvent
).
The class SamplePick implements the PickListener interface. It is not an inner class
only because of the size of the pickPerformed
method. The pick listener is added
to the chart node bar. This means that it is active for that node and its children but
is not active for the axes and other nodes.
(Download Code)
import com.imsl.chart.*; import java.awt.Color; public class SamplePick extends JFrameChart implements PickListener { static private final double x[] = {0, 1, 2, 3}; static private final double y[] = {4, 1, 2, 5}; public SamplePick() { // Create a bar chart Chart chart = getChart(); AxisXY axis = new AxisXY(chart); Bar bar = new Bar(axis, x, y); bar.setBarType(Bar.BAR_TYPE_VERTICAL); bar.setLabels(new String[]{"A","B","C"}); bar.setFillColor(Color.blue); // Add the pick listener to the bar bar.addPickListener(this); // Add the mouse listener addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent event) { getChart().pick(event); } }); } public void pickPerformed(PickEvent event) { // Track the number of hits on this bar ChartNode node = event.getNode(); int count = node.getIntegerAttribute("pick.count", 0); count++; node.setAttribute("pick.count", new Integer(count)); // Change the bar's color depending on the number of times // it has been picked. Color color = ((count%2==0) ? Color.blue : Color.red); node.setFillColor(color); node.setLineColor(color); repaint(); } public static void main(String argv[]) { new SamplePick().setVisible(true); } }
© Visual Numerics, Inc. All rights reserved. |