Example usage for org.jfree.chart JFreeChart plotChanged

List of usage examples for org.jfree.chart JFreeChart plotChanged

Introduction

In this page you can find the example usage for org.jfree.chart JFreeChart plotChanged.

Prototype

@Override
public void plotChanged(PlotChangeEvent event) 

Source Link

Document

Receives notification that the plot has changed, and passes this on to registered listeners.

Usage

From source file:net.bioclipse.plugins.views.ChartView.java

public void selectionChanged(IWorkbenchPart part, ISelection selection) {
    if (selection instanceof CellSelection) {
        CellSelection cs = (CellSelection) selection;
        Object source = cs.getSource();

        Set<JFreeChart> keySet = ChartUtils.keySet();
        Iterator<JFreeChart> i = keySet.iterator();
        List<JFreeChart> matchingCharts = new ArrayList<JFreeChart>();

        //First get the set of charts that originates from CelSelection source and are scatter plots
        while (i.hasNext()) {
            JFreeChart chart = i.next();
            ChartDescriptor chartDescriptor = ChartUtils.getChartDescriptor(chart);
            if (chartDescriptor.getSource() == source
                    && chartDescriptor.getPlotType() == ChartConstants.SCATTER_PLOT) {
                matchingCharts.add(chart);
            }//from www  .  j a  v a  2  s. co  m
        }

        //Check if any points should be marked on the matching charts
        Iterator<JFreeChart> j = matchingCharts.iterator();
        while (j.hasNext()) {
            JFreeChart chart = j.next();
            ChartDescriptor chartDescriptor = ChartUtils.getChartDescriptor(chart);

            ScatterPlotRenderer renderer = (ScatterPlotRenderer) chart.getXYPlot().getRenderer();
            Iterator<CellData> cellIterator = cs.iterator();
            renderer.clearMarkedPoints();

            while (cellIterator.hasNext()) {
                CellData cd = cellIterator.next();
                if (cd.getColName().equals(chartDescriptor.getXLabel())
                        || cd.getColName().equals(chartDescriptor.getYLabel())) {
                    renderer.addMarkedPoint(0, cd.getRowIndex());

                }
            }
            chart.plotChanged(new PlotChangeEvent(chart.getPlot()));
        }
    }
}

From source file:net.bioclipse.model.ScatterPlotMouseHandler.java

@Override
public void mouseDragged(MouseEvent e) {
    super.mouseDragged(e);

    ChartPanel chartPanel = getChartPanel(e);
    JFreeChart selectedChart = chartPanel.getChart();
    ChartDescriptor cd = ChartUtils.getChartDescriptor(selectedChart);
    int[] indices = cd.getSourceIndices();

    XYPlot plot = (XYPlot) chartPanel.getChart().getPlot();

    //Create double buffer
    Image buffer = chartPanel.createImage(chartPanel.getWidth(), chartPanel.getHeight());
    Graphics bufferGraphics = buffer.getGraphics();
    chartPanel.paint(bufferGraphics);// www .  ja  va 2s .c o m

    if (lastX == 0 && lastY == 0) {
        lastX = e.getX();
        lastY = e.getY();
    }

    drawRect = new Rectangle();
    int x1 = Math.min(Math.min(e.getX(), lastX), startX);
    int y1 = Math.min(Math.min(e.getY(), lastY), startY);
    int x2 = Math.max(Math.max(e.getX(), lastX), startX);
    int y2 = Math.max(Math.max(e.getY(), lastY), startY);

    drawRect.x = x1;
    drawRect.y = y1;
    drawRect.width = x2 - drawRect.x;
    drawRect.height = y2 - drawRect.y;

    //Create a clipping rectangle
    Rectangle clipRect = new Rectangle(drawRect.x - 100, drawRect.y - 100, drawRect.width + 200,
            drawRect.height + 200);

    //Check for selected points
    for (int j = 0; j < plot.getDataset().getItemCount(plot.getDataset().getSeriesCount() - 1); j++) {
        for (int i = 0; i < plot.getDataset().getSeriesCount(); i++) {
            Number xK = plot.getDataset().getX(i, j);
            Number yK = plot.getDataset().getY(i, j);
            Point2D datasetPoint2D = new Point2D.Double(domainValueTo2D(chartPanel, plot, xK.doubleValue()),
                    rangeValueTo2D(chartPanel, plot, yK.doubleValue()));

            if (drawRect.contains(datasetPoint2D)) {
                PlotPointData cp = new PlotPointData(indices[j], cd.getXLabel(), cd.getYLabel());
                boolean pointAdded = mouseDragSelection.addPoint(cp);
                if (pointAdded) {
                    ((ScatterPlotRenderer) plot.getRenderer()).addMarkedPoint(j, i);
                    selectedChart.plotChanged(new PlotChangeEvent(plot));
                }
            } else if (!mouseDragSelection.isEmpty()) {
                PlotPointData cp = new PlotPointData(indices[j], cd.getXLabel(), cd.getYLabel());
                boolean pointRemoved = mouseDragSelection.removePoint(cp);
                if (pointRemoved) {
                    ((ScatterPlotRenderer) plot.getRenderer()).removeMarkedPoint(new Point(j, i));
                    selectedChart.plotChanged(new PlotChangeEvent(plot));
                }
            }
        }
    }

    Iterator<PlotPointData> iterator = currentSelection.iterator();
    while (iterator.hasNext()) {
        PlotPointData next = iterator.next();
        Point dataPoint = next.getDataPoint();
        ((ScatterPlotRenderer) plot.getRenderer()).addMarkedPoint(dataPoint);
    }

    lastX = e.getX();
    lastY = e.getY();

    Graphics graphics = chartPanel.getGraphics();
    graphics.setClip(clipRect);

    //Draw selection rectangle
    bufferGraphics.drawRect(drawRect.x, drawRect.y, drawRect.width, drawRect.height);

    graphics.drawImage(buffer, 0, 0, chartPanel.getWidth(), chartPanel.getHeight(), null);
}

From source file:net.bioclipse.model.ScatterPlotMouseHandler.java

public void mouseClicked(MouseEvent me) {
    Point2D p = null;//from  www. j  a v  a 2s .  co m
    ChartDescriptor cd = null;
    int[] indices = null;
    JFreeChart selectedChart = null;

    ChartPanel chartPanel = getChartPanel(me);
    p = chartPanel.translateScreenToJava2D(new Point(me.getX(), me.getY()));
    selectedChart = chartPanel.getChart();

    cd = ChartUtils.getChartDescriptor(selectedChart);
    indices = cd.getSourceIndices();

    XYPlot plot = (XYPlot) chartPanel.getChart().getPlot();

    XYItemRenderer plotRenderer = plot.getRenderer();

    if (!(plotRenderer instanceof ScatterPlotRenderer)) {
        throw new IllegalStateException(
                "Charts using ScatterPlotMouseHandler must use ScatterPlotRenderer as their renderer");
    }
    renderer = (ScatterPlotRenderer) plot.getRenderer();

    // now convert the Java2D coordinate to axis coordinates...
    Number xx = getDomainX(chartPanel, plot, p);
    Number yy = getRangeY(chartPanel, plot, p);

    //Find the selected point in the dataset
    //If shift is down, save old selections
    if (!me.isShiftDown() || currentSelection == null) {
        currentSelection = new ChartSelection();
    }

    for (int j = 0; j < plot.getDataset().getItemCount(plot.getDataset().getSeriesCount() - 1); j++) {
        for (int i = 0; i < plot.getDataset().getSeriesCount(); i++) {
            Number xK = plot.getDataset().getX(i, j);
            Number yK = plot.getDataset().getY(i, j);
            Number xKCheck = xK.doubleValue() - xx.doubleValue();
            Number yKCheck = yK.doubleValue() - yy.doubleValue();
            Number xxCheck = xKCheck.doubleValue() * xKCheck.doubleValue();
            Number yyCheck = yKCheck.doubleValue() * yKCheck.doubleValue();
            //Check distance from click and point, don't want to mark points that are too far from the click
            if (Math.sqrt(xxCheck.doubleValue()) <= 0.1 && Math.sqrt(yyCheck.doubleValue()) <= 0.1) {
                //Create a new selection
                PlotPointData cp = new PlotPointData(indices[j], cd.getXLabel(), cd.getYLabel());
                cp.setDataPoint(j, i);
                currentSelection.addPoint(cp);
                if (!me.isShiftDown())
                    renderer.clearMarkedPoints();
                renderer.addMarkedPoint(j, i);
                selectedChart.plotChanged(new PlotChangeEvent(plot));

            }
        }
    }
    currentSelection.setDescriptor(cd);
    ChartUtils.updateSelection(currentSelection);
}