JMSL Chart Programmer's Guide
Actions >> Picking  Previous Page  Contents  Next Page

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.  Previous Page  Contents  Next Page