Example usage for org.jfree.chart.renderer.xy XYItemRenderer setBaseToolTipGenerator

List of usage examples for org.jfree.chart.renderer.xy XYItemRenderer setBaseToolTipGenerator

Introduction

In this page you can find the example usage for org.jfree.chart.renderer.xy XYItemRenderer setBaseToolTipGenerator.

Prototype

public void setBaseToolTipGenerator(XYToolTipGenerator generator);

Source Link

Document

Sets the base tool tip generator and sends a RendererChangeEvent to all registered listeners.

Usage

From source file:com.att.aro.diagnostics.GraphPanel.java

private static void populateNetworkTyesPlot(XYPlot plot, TraceData.Analysis analysis) {
    if (analysis != null) {

        final XYIntervalSeriesCollection networkDataSeries = new XYIntervalSeriesCollection();
        final Map<NetworkType, XYIntervalSeries> seriesMap = new EnumMap<NetworkType, XYIntervalSeries>(
                NetworkType.class);
        createDataSeriesForAllNetworkTypes(seriesMap, networkDataSeries);

        Iterator<NetworkBearerTypeInfo> iter = analysis.getNetworTypeInfos().iterator();
        if (iter.hasNext()) {
            while (iter.hasNext()) {
                NetworkBearerTypeInfo networkInfo = iter.next();
                if (networkInfo.getNetworkType() != NetworkType.none) {
                    seriesMap.get(networkInfo.getNetworkType()).add(networkInfo.getBeginTimestamp(),
                            networkInfo.getBeginTimestamp(), networkInfo.getEndTimestamp(), 0.5, 0, 1);
                }/*  w w  w .  ja  va  2s. c  o m*/
            }
        } else {
            NetworkType nt = analysis.getTraceData().getNetworkType();
            if (nt != null && nt != NetworkType.none) {
                seriesMap.get(nt).add(0, 0, analysis.getTraceData().getTraceDuration(), 0.5, 0, 1);
            }
        }

        XYItemRenderer renderer = plot.getRenderer();
        setRenderingColorForDataSeries(renderer, networkDataSeries);

        // Assign ToolTip to renderer
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                NetworkType networkType = (NetworkType) networkDataSeries.getSeries(series).getKey();
                return MessageFormat.format(rb.getString("network.tooltip"), dataset.getX(series, item),
                        ResourceBundleManager.getEnumString(networkType));
            }
        });

        plot.setDataset(networkDataSeries);

    } else {
        plot.setDataset(new XYIntervalSeriesCollection());
    }
}

From source file:com.att.aro.diagnostics.GraphPanel.java

private static void populateUserEventPlot(XYPlot plot, TraceData.Analysis analysis) {

    final XYIntervalSeriesCollection userInputData = new XYIntervalSeriesCollection();
    if (analysis != null) {

        // create the dataset...
        Map<UserEvent.UserEventType, XYIntervalSeries> seriesMap = new EnumMap<UserEvent.UserEventType, XYIntervalSeries>(
                UserEvent.UserEventType.class);
        for (UserEvent.UserEventType eventType : UserEvent.UserEventType.values()) {
            XYIntervalSeries series = new XYIntervalSeries(eventType);
            seriesMap.put(eventType, series);
            userInputData.addSeries(series);
        }/*from  w  ww.j  a v  a 2 s  .  c  om*/
        // Populate the data set
        for (UserEvent event : analysis.getUserEvents()) {
            seriesMap.get(event.getEventType()).add(event.getPressTime(), event.getPressTime(),
                    event.getReleaseTime(), 0.5, 0, 1);
        }

        // Assign ToolTip to renderer
        XYItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(userInputData.indexOf(UserEventType.SCREEN_LANDSCAPE), Color.BLUE);
        renderer.setSeriesPaint(userInputData.indexOf(UserEventType.SCREEN_PORTRAIT), Color.BLUE);
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {

            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                UserEvent.UserEventType eventType = (UserEvent.UserEventType) userInputData.getSeries(series)
                        .getKey();
                return ResourceBundleManager.getEnumString(eventType);
            }
        });

    }

    plot.setDataset(userInputData);
}

From source file:com.att.aro.diagnostics.GraphPanel.java

private static void populateGpsPlot(XYPlot plot, TraceData.Analysis analysis) {
    final XYIntervalSeriesCollection gpsData = new XYIntervalSeriesCollection();
    if (analysis != null) {

        // create the GPS dataset...
        Map<GpsState, XYIntervalSeries> seriesMap = new EnumMap<GpsState, XYIntervalSeries>(GpsState.class);
        for (GpsState eventType : GpsState.values()) {
            XYIntervalSeries series = new XYIntervalSeries(eventType);
            seriesMap.put(eventType, series);
            gpsData.addSeries(series);/*from  w w w  .j ava2s . c o m*/
        }
        Iterator<GpsInfo> iter = analysis.getGpsInfos().iterator();
        if (iter.hasNext()) {
            while (iter.hasNext()) {
                GpsInfo gpsEvent = iter.next();
                if (gpsEvent.getGpsState() != GpsState.GPS_DISABLED) {
                    seriesMap.get(gpsEvent.getGpsState()).add(gpsEvent.getBeginTimeStamp(),
                            gpsEvent.getBeginTimeStamp(), gpsEvent.getEndTimeStamp(), 0.5, 0, 1);
                }
            }
        }

        XYItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(gpsData.indexOf(GpsState.GPS_STANDBY), Color.YELLOW);
        renderer.setSeriesPaint(gpsData.indexOf(GpsState.GPS_ACTIVE), new Color(34, 177, 76));

        // Assign ToolTip to renderer
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                GpsState eventType = (GpsState) gpsData.getSeries(series).getKey();
                return MessageFormat.format(rb.getString("gps.tooltip"), dataset.getX(series, item),
                        ResourceBundleManager.getEnumString(eventType));
            }
        });

    }
    plot.setDataset(gpsData);
}

From source file:com.att.aro.diagnostics.GraphPanel.java

private static void populateBluetoothPlot(XYPlot plot, TraceData.Analysis analysis) {

    // create the dataset...
    final XYIntervalSeriesCollection bluetoothData = new XYIntervalSeriesCollection();
    if (analysis != null) {

        XYIntervalSeries bluetoothConnected = new XYIntervalSeries(BluetoothState.BLUETOOTH_CONNECTED);
        XYIntervalSeries bluetoothDisconnected = new XYIntervalSeries(BluetoothState.BLUETOOTH_DISCONNECTED);
        XYIntervalSeries bluetoothOff = new XYIntervalSeries(BluetoothState.BLUETOOTH_TURNED_OFF);

        bluetoothData.addSeries(bluetoothConnected);
        bluetoothData.addSeries(bluetoothDisconnected);
        // bluetoothStateCollection.addSeries(bluetoothOff);

        // Populate the data set
        Iterator<BluetoothInfo> iter = analysis.getBluetoothInfos().iterator();
        XYIntervalSeries series;//from w  ww . j ava2s . co m
        if (iter.hasNext()) {
            while (iter.hasNext()) {
                BluetoothInfo btEvent = iter.next();
                switch (btEvent.getBluetoothState()) {
                case BLUETOOTH_CONNECTED:
                    series = bluetoothConnected;
                    break;
                case BLUETOOTH_DISCONNECTED:
                    series = bluetoothDisconnected;
                    break;
                default:
                    series = bluetoothOff;
                    break;
                }
                series.add(btEvent.getBeginTimeStamp(), btEvent.getBeginTimeStamp(), btEvent.getEndTimeStamp(),
                        0.5, 0, 1);
            }

        }

        XYItemRenderer renderer = plot.getRenderer();
        renderer.setSeriesPaint(bluetoothData.indexOf(BluetoothState.BLUETOOTH_CONNECTED),
                new Color(34, 177, 76));
        renderer.setSeriesPaint(bluetoothData.indexOf(BluetoothState.BLUETOOTH_DISCONNECTED), Color.YELLOW);

        // Assign ToolTip to renderer
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                BluetoothState eventType = (BluetoothState) bluetoothData.getSeries(series).getKey();
                return MessageFormat.format(rb.getString("bluetooth.tooltip"), dataset.getX(series, item),
                        ResourceBundleManager.getEnumString(eventType));
            }
        });

    }
    plot.setDataset(bluetoothData);
}

From source file:com.att.aro.ui.view.diagnostictab.plot.RrcPlot.java

@Override
public void populate(XYPlot plot, AROTraceData analysis) {
    if (analysis != null) {
        rrcDataCollection.removeAllSeries();
        Map<RRCState, XYIntervalSeries> seriesMap = new EnumMap<RRCState, XYIntervalSeries>(RRCState.class);
        for (RRCState eventType : RRCState.values()) {
            XYIntervalSeries series = new XYIntervalSeries(eventType);
            seriesMap.put(eventType, series);
            rrcDataCollection.addSeries(series);
        }/*from  ww w.j ava  2  s  .com*/
        List<RrcStateRange> rrcStates = analysis.getAnalyzerResult().getStatemachine().getStaterangelist();

        Iterator<RrcStateRange> iter = rrcStates.iterator();
        while (iter.hasNext()) {
            RrcStateRange currEvent = iter.next();
            RRCState state = currEvent.getState();
            if (state == RRCState.STATE_FACH || state == RRCState.TAIL_FACH) {
                seriesMap.get(state).add(currEvent.getBeginTime(), currEvent.getBeginTime(),
                        currEvent.getEndTime(), 0.25, 0, 0.5);
            } else {
                seriesMap.get(state).add(currEvent.getBeginTime(), currEvent.getBeginTime(),
                        currEvent.getEndTime(), 0.5, 0, 1);
            }

        }
        XYItemRenderer renderer = plot.getRenderer();
        Color dchGreen = new Color(34, 177, 76);
        Color fachOrange = new Color(255, 201, 14);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.STATE_IDLE), Color.white);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_IDLE), Color.white);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.PROMO_IDLE_DCH), Color.red);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_PROMOTION), Color.red);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.STATE_DCH), fachOrange);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_CONTINUOUS), fachOrange);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.TAIL_DCH), getTailPaint(fachOrange));
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_CR_TAIL), getTailPaint(fachOrange));
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_DRX_SHORT), getTailPaint(fachOrange));
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.LTE_DRX_LONG), getTailPaint(fachOrange));

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.STATE_FACH), dchGreen);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.TAIL_FACH), getTailPaint(dchGreen));

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.PROMO_FACH_DCH), Color.red);

        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.WIFI_IDLE), Color.white);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.WIFI_ACTIVE), fachOrange);
        renderer.setSeriesPaint(rrcDataCollection.indexOf(RRCState.WIFI_TAIL), getTailPaint(fachOrange));

        // Assign ToolTip to renderer

        final Profile profile = analysis.getAnalyzerResult().getProfile();
        renderer.setBaseToolTipGenerator(new XYToolTipGenerator() {
            @Override
            public String generateToolTip(XYDataset dataset, int series, int item) {
                RRCState eventType = (RRCState) rrcDataCollection.getSeries(series).getKey();
                final String PREFIX = "RRCTooltip.";
                if (eventType == RRCState.LTE_IDLE && profile instanceof ProfileLTE) {
                    return MessageFormat.format(ResourceBundleHelper.getMessageString(PREFIX + eventType),
                            ((ProfileLTE) profile).getIdlePingPeriod());
                }
                return ResourceBundleHelper.getMessageString(PREFIX + eventType);
            }
        });

    }

    plot.setDataset(rrcDataCollection);
    //      return plot;
}

From source file:org.yccheok.jstock.gui.charting.ChartJDialog.java

/**
 * Creates a chart./*from w ww  .ja v  a 2s.c  o m*/
 *
 * @return a chart.
 */
private JFreeChart createPriceVolumeChart(XYDataset priceDataset, XYDataset volumeDataset) {
    final String title = getBestStockName();

    final ValueAxis timeAxis = new DateAxis(GUIBundle.getString("ChartJDialog_Date"));
    timeAxis.setLowerMargin(0.02); // reduce the default margins
    timeAxis.setUpperMargin(0.02);

    final NumberAxis rangeAxis1 = new NumberAxis(GUIBundle.getString("ChartJDialog_Price"));
    rangeAxis1.setAutoRangeIncludesZero(false); // override default
    rangeAxis1.setLowerMargin(0.40); // to leave room for volume bars
    DecimalFormat format = new DecimalFormat("0.00#");
    rangeAxis1.setNumberFormatOverride(format);

    XYPlot plot = new XYPlot(priceDataset, timeAxis, rangeAxis1, null);

    XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
    renderer1.setBaseToolTipGenerator(
            new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                    new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00#")));
    plot.setRenderer(0, renderer1);

    final NumberAxis rangeAxis2 = new NumberAxis("Volume");
    rangeAxis2.setUpperMargin(1.00); // to leave room for price line
    plot.setRangeAxis(1, rangeAxis2);
    plot.setDataset(1, volumeDataset);
    plot.mapDatasetToRangeAxis(1, 1);

    XYBarRenderer renderer2 = new XYBarRenderer(0.20);
    renderer2.setBaseToolTipGenerator(
            new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                    new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0,000.00")));
    plot.setRenderer(1, renderer2);

    CombinedDomainXYPlot cplot = new CombinedDomainXYPlot(timeAxis);
    cplot.add(plot, 1);
    cplot.setGap(8.0);

    JFreeChart chart = new JFreeChart(title, JFreeChart.DEFAULT_TITLE_FONT, cplot, true);
    org.yccheok.jstock.charting.Utils.applyChartThemeEx(chart);

    // Only do it after applying chart theme.
    org.yccheok.jstock.charting.Utils.setPriceSeriesPaint(renderer1);
    org.yccheok.jstock.charting.Utils.setVolumeSeriesPaint(renderer2);

    // Handle zooming event.
    chart.addChangeListener(this.getChartChangeListner());

    return chart;
}

From source file:org.yccheok.jstock.gui.charting.ChartJDialog.java

private void updateMFI(int days, boolean show) {
    if (this.priceVolumeChart == null) {
        this.priceVolumeChart = this.createPriceVolumeChart(this.priceDataset, this.volumeDataset);
    }/*w w  w.ja  v a2 s .  c  o m*/
    if (this.candlestickChart == null) {
        this.candlestickChart = this.createCandlestickChart(this.priceOHLCDataset);
    }

    final TAEx taEx = TAEx.newInstance(TA.MFI, new Integer(days));

    if (show) {
        if (price_volume_ta_map.containsKey(taEx) == false) {
            final XYDataset dataset = org.yccheok.jstock.charting.TechnicalAnalysis.createMFI(this.chartDatas,
                    getMFIKey(days), days);
            NumberAxis rangeAxis1 = new NumberAxis(GUIBundle.getString("ChartJDialog_MFI"));
            rangeAxis1.setAutoRangeIncludesZero(false); // override default
            rangeAxis1.setLowerMargin(0.40); // to leave room for volume bars
            DecimalFormat format = new DecimalFormat("0");
            rangeAxis1.setNumberFormatOverride(format);

            final ValueAxis timeAxis = new DateAxis(GUIBundle.getString("ChartJDialog_Date"));
            timeAxis.setLowerMargin(0.02); // reduce the default margins
            timeAxis.setUpperMargin(0.02);

            XYPlot plot = new XYPlot(dataset, timeAxis, rangeAxis1, null);

            XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
            renderer1.setBaseToolTipGenerator(
                    new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                            new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00#")));
            plot.setRenderer(0, renderer1);
            price_volume_ta_map.put(taEx, plot);
        }

        if (candlestick_ta_map.containsKey(taEx) == false) {
            try {
                /* Not sure why. I cannot make priceVolumeChart and candlestickChart sharing the same
                 * plot. If not, this will inhibit incorrect zooming behavior.
                 */
                candlestick_ta_map.put(taEx, (XYPlot) price_volume_ta_map.get(taEx).clone());
            } catch (CloneNotSupportedException ex) {
                log.error(null, ex);
            }
        }

        if (this.activeTAExs.contains(taEx) == false) {
            // Avoid duplication.
            final XYPlot price_volume_ta = price_volume_ta_map.get(taEx);
            final XYPlot candlestick_ta = candlestick_ta_map.get(taEx);

            final CombinedDomainXYPlot cplot0 = (CombinedDomainXYPlot) this.priceVolumeChart.getPlot();
            final CombinedDomainXYPlot cplot1 = (CombinedDomainXYPlot) this.candlestickChart.getPlot();
            if (price_volume_ta != null)
                cplot0.add(price_volume_ta, 1); // weight is 1.
            if (candlestick_ta != null)
                cplot1.add(candlestick_ta, 1); // weight is 1.
            org.yccheok.jstock.charting.Utils.applyChartThemeEx(this.priceVolumeChart);
            org.yccheok.jstock.charting.Utils.applyChartThemeEx(this.candlestickChart);
        }
    } else {
        final CombinedDomainXYPlot cplot0 = (CombinedDomainXYPlot) this.priceVolumeChart.getPlot();
        final CombinedDomainXYPlot cplot1 = (CombinedDomainXYPlot) this.candlestickChart.getPlot();
        final XYPlot price_volume_ta = price_volume_ta_map.get(taEx);
        final XYPlot candlestick_ta = candlestick_ta_map.get(taEx);

        if (price_volume_ta != null)
            cplot0.remove(price_volume_ta);
        if (candlestick_ta != null)
            cplot1.remove(candlestick_ta);
    }

    if (show && this.activeTAExs.contains(taEx) == false) {
        this.activeTAExs.add(taEx);
        JStock.instance().getChartJDialogOptions().add(taEx);
    } else if (!show) {
        this.activeTAExs.remove(taEx);
        JStock.instance().getChartJDialogOptions().remove(taEx);
    }
}

From source file:org.yccheok.jstock.gui.charting.ChartJDialog.java

private void updateRSI(int days, boolean show) {
    if (this.priceVolumeChart == null) {
        this.priceVolumeChart = this.createPriceVolumeChart(this.priceDataset, this.volumeDataset);
    }/* w  ww  . j  a va2 s .c om*/
    if (this.candlestickChart == null) {
        this.candlestickChart = this.createCandlestickChart(this.priceOHLCDataset);
    }

    final TAEx taEx = TAEx.newInstance(TA.RSI, new Integer(days));

    if (show) {
        if (price_volume_ta_map.containsKey(taEx) == false) {
            final XYDataset dataset = org.yccheok.jstock.charting.TechnicalAnalysis.createRSI(this.chartDatas,
                    getRSIKey(days), days);
            NumberAxis rangeAxis1 = new NumberAxis(GUIBundle.getString("ChartJDialog_RSI"));
            rangeAxis1.setAutoRangeIncludesZero(false); // override default
            rangeAxis1.setLowerMargin(0.40); // to leave room for volume bars
            DecimalFormat format = new DecimalFormat("0");
            rangeAxis1.setNumberFormatOverride(format);

            final ValueAxis timeAxis = new DateAxis(GUIBundle.getString("ChartJDialog_Date"));
            timeAxis.setLowerMargin(0.02); // reduce the default margins
            timeAxis.setUpperMargin(0.02);

            XYPlot plot = new XYPlot(dataset, timeAxis, rangeAxis1, null);

            XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
            renderer1.setBaseToolTipGenerator(
                    new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                            new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00#")));
            plot.setRenderer(0, renderer1);
            price_volume_ta_map.put(taEx, plot);
        }

        if (candlestick_ta_map.containsKey(taEx) == false) {
            try {
                /* Not sure why. I cannot make priceVolumeChart and candlestickChart sharing the same
                 * plot. If not, this will inhibit incorrect zooming behavior.
                 */
                candlestick_ta_map.put(taEx, (XYPlot) price_volume_ta_map.get(taEx).clone());
            } catch (CloneNotSupportedException ex) {
                log.error(null, ex);
            }
        }

        if (this.activeTAExs.contains(taEx) == false) {
            // Avoid duplication.
            final XYPlot price_volume_ta = price_volume_ta_map.get(taEx);
            final XYPlot candlestick_ta = candlestick_ta_map.get(taEx);
            final CombinedDomainXYPlot cplot0 = (CombinedDomainXYPlot) this.priceVolumeChart.getPlot();
            final CombinedDomainXYPlot cplot1 = (CombinedDomainXYPlot) this.candlestickChart.getPlot();

            if (price_volume_ta != null)
                cplot0.add(price_volume_ta, 1); // weight is 1.
            if (candlestick_ta != null)
                cplot1.add(candlestick_ta, 1); // weight is 1.
            org.yccheok.jstock.charting.Utils.applyChartThemeEx(this.priceVolumeChart);
            org.yccheok.jstock.charting.Utils.applyChartThemeEx(this.candlestickChart);
        }
    } else {
        final CombinedDomainXYPlot cplot0 = (CombinedDomainXYPlot) this.priceVolumeChart.getPlot();
        final CombinedDomainXYPlot cplot1 = (CombinedDomainXYPlot) this.candlestickChart.getPlot();
        final XYPlot price_volume_ta = price_volume_ta_map.get(taEx);
        final XYPlot candlestick_ta = candlestick_ta_map.get(taEx);

        if (price_volume_ta != null)
            cplot0.remove(price_volume_ta);
        if (candlestick_ta != null)
            cplot1.remove(candlestick_ta);
    }

    if (show && this.activeTAExs.contains(taEx) == false) {
        this.activeTAExs.add(taEx);
        JStock.instance().getChartJDialogOptions().add(taEx);
    } else if (!show) {
        this.activeTAExs.remove(taEx);
        JStock.instance().getChartJDialogOptions().remove(taEx);
    }
}

From source file:org.yccheok.jstock.gui.charting.ChartJDialog.java

private void updateCCI(int days, boolean show) {
    if (this.priceVolumeChart == null) {
        this.priceVolumeChart = this.createPriceVolumeChart(this.priceDataset, this.volumeDataset);
    }/*from  www. jav a 2 s . c  om*/
    if (this.candlestickChart == null) {
        this.candlestickChart = this.createCandlestickChart(this.priceOHLCDataset);
    }

    final TAEx taEx = TAEx.newInstance(TA.CCI, new Integer(days));

    if (show) {
        if (price_volume_ta_map.containsKey(taEx) == false) {
            final XYDataset dataset = org.yccheok.jstock.charting.TechnicalAnalysis.createCCI(this.chartDatas,
                    getCCIKey(days), days);
            NumberAxis rangeAxis1 = new NumberAxis(GUIBundle.getString("ChartJDialog_CCI"));
            rangeAxis1.setAutoRangeIncludesZero(false); // override default
            rangeAxis1.setLowerMargin(0.40); // to leave room for volume bars
            DecimalFormat format = new DecimalFormat("0");
            rangeAxis1.setNumberFormatOverride(format);

            final ValueAxis timeAxis = new DateAxis(GUIBundle.getString("ChartJDialog_Date"));
            timeAxis.setLowerMargin(0.02); // reduce the default margins
            timeAxis.setUpperMargin(0.02);

            XYPlot plot = new XYPlot(dataset, timeAxis, rangeAxis1, null);

            XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
            renderer1.setBaseToolTipGenerator(
                    new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                            new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00#")));
            plot.setRenderer(0, renderer1);
            org.yccheok.jstock.charting.Utils.setPriceSeriesPaint(renderer1);
            price_volume_ta_map.put(taEx, plot);
        }

        if (candlestick_ta_map.containsKey(taEx) == false) {
            try {
                /* Not sure why. I cannot make priceVolumeChart and candlestickChart sharing the same
                 * plot. If not, this will inhibit incorrect zooming behavior.
                 */
                candlestick_ta_map.put(taEx, (XYPlot) price_volume_ta_map.get(taEx).clone());
            } catch (CloneNotSupportedException ex) {
                log.error(null, ex);
            }
        }

        if (this.activeTAExs.contains(taEx) == false) {
            // Avoid duplication.
            final XYPlot price_volume_ta = price_volume_ta_map.get(taEx);
            final XYPlot candlestick_ta = candlestick_ta_map.get(taEx);

            final CombinedDomainXYPlot cplot0 = (CombinedDomainXYPlot) this.priceVolumeChart.getPlot();
            final CombinedDomainXYPlot cplot1 = (CombinedDomainXYPlot) this.candlestickChart.getPlot();
            if (price_volume_ta != null)
                cplot0.add(price_volume_ta, 1); // weight is 1.
            if (candlestick_ta != null)
                cplot1.add(candlestick_ta, 1); // weight is 1.
            org.yccheok.jstock.charting.Utils.applyChartThemeEx(this.priceVolumeChart);
            org.yccheok.jstock.charting.Utils.applyChartThemeEx(this.candlestickChart);
        }
    } else {
        final CombinedDomainXYPlot cplot0 = (CombinedDomainXYPlot) this.priceVolumeChart.getPlot();
        final CombinedDomainXYPlot cplot1 = (CombinedDomainXYPlot) this.candlestickChart.getPlot();
        final XYPlot price_volume_ta = price_volume_ta_map.get(taEx);
        final XYPlot candlestick_ta = candlestick_ta_map.get(taEx);

        if (price_volume_ta != null)
            cplot0.remove(price_volume_ta);
        if (candlestick_ta != null)
            cplot1.remove(candlestick_ta);
    }

    if (show && this.activeTAExs.contains(taEx) == false) {
        this.activeTAExs.add(taEx);
        JStock.instance().getChartJDialogOptions().add(taEx);
    } else if (!show) {
        this.activeTAExs.remove(taEx);
        JStock.instance().getChartJDialogOptions().remove(taEx);
    }
}

From source file:org.yccheok.jstock.gui.charting.ChartJDialog.java

private void updateMACD(MACD.Period period, boolean show) {
    if (this.priceVolumeChart == null) {
        this.priceVolumeChart = this.createPriceVolumeChart(this.priceDataset, this.volumeDataset);
    }//from   w  w w  . ja  v  a 2  s.  c  om
    if (this.candlestickChart == null) {
        this.candlestickChart = this.createCandlestickChart(this.priceOHLCDataset);
    }

    final TAEx taEx = TAEx.newInstance(TA.MACD, period);
    if (show) {
        if (price_volume_ta_map.containsKey(taEx) == false) {
            final MACD.ChartResult macdChartResult = org.yccheok.jstock.charting.TechnicalAnalysis
                    .createMACD(this.chartDatas, getMACDKey(period), period);

            // MACD!
            NumberAxis rangeAxis1 = new NumberAxis(GUIBundle.getString("ChartJDialog_MACD"));
            rangeAxis1.setAutoRangeIncludesZero(false); // override default
            rangeAxis1.setLowerMargin(0.40); // to leave room for volume bars
            DecimalFormat format = new DecimalFormat("0.00#");
            rangeAxis1.setNumberFormatOverride(format);

            final ValueAxis timeAxis = new DateAxis(GUIBundle.getString("ChartJDialog_Date"));
            timeAxis.setLowerMargin(0.02); // reduce the default margins
            timeAxis.setUpperMargin(0.02);

            XYPlot plot = new XYPlot(macdChartResult.outMACD, timeAxis, rangeAxis1, null);

            XYItemRenderer renderer1 = new XYLineAndShapeRenderer(true, false);
            renderer1.setBaseToolTipGenerator(
                    new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                            new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00#")));
            plot.setRenderer(0, renderer1);
            org.yccheok.jstock.charting.Utils.setPriceSeriesPaint(renderer1);

            // MACD SIGNAL!
            plot.setDataset(1, macdChartResult.outMACDSignal);
            XYItemRenderer renderer2 = new XYLineAndShapeRenderer(true, false);
            renderer2.setBaseToolTipGenerator(
                    new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                            new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0.00#")));
            plot.setRenderer(1, renderer2);

            // VOLUME!
            //plot.setRangeAxis(1, rangeAxis1);
            plot.setDataset(2, macdChartResult.outMACDHist);
            //plot.mapDatasetToRangeAxis(1, 1);

            XYBarRenderer renderer3 = new XYBarRenderer(0.20);

            renderer3.setBaseToolTipGenerator(
                    new StandardXYToolTipGenerator(StandardXYToolTipGenerator.DEFAULT_TOOL_TIP_FORMAT,
                            new SimpleDateFormat("d-MMM-yyyy"), new DecimalFormat("0,000.00")));
            plot.setRenderer(2, renderer3);

            price_volume_ta_map.put(taEx, plot);
        }

        if (candlestick_ta_map.containsKey(taEx) == false) {
            try {
                /* Not sure why. I cannot make priceVolumeChart and candlestickChart sharing the same
                 * plot. If not, this will inhibit incorrect zooming behavior.
                 */
                candlestick_ta_map.put(taEx, (XYPlot) price_volume_ta_map.get(taEx).clone());
            } catch (CloneNotSupportedException ex) {
                log.error(null, ex);
            }
        }

        if (this.activeTAExs.contains(taEx) == false) {
            // Avoid duplication.
            final XYPlot price_volume_ta = price_volume_ta_map.get(taEx);
            final XYPlot candlestick_ta = candlestick_ta_map.get(taEx);

            final CombinedDomainXYPlot cplot0 = (CombinedDomainXYPlot) this.priceVolumeChart.getPlot();
            final CombinedDomainXYPlot cplot1 = (CombinedDomainXYPlot) this.candlestickChart.getPlot();
            if (price_volume_ta != null)
                cplot0.add(price_volume_ta, 1); // weight is 1.
            if (candlestick_ta != null)
                cplot1.add(candlestick_ta, 1); // weight is 1.
            org.yccheok.jstock.charting.Utils.applyChartThemeEx(this.priceVolumeChart);
            org.yccheok.jstock.charting.Utils.applyChartThemeEx(this.candlestickChart);
        }
    } else {
        final CombinedDomainXYPlot cplot0 = (CombinedDomainXYPlot) this.priceVolumeChart.getPlot();
        final CombinedDomainXYPlot cplot1 = (CombinedDomainXYPlot) this.candlestickChart.getPlot();
        final XYPlot price_volume_ta = price_volume_ta_map.get(taEx);
        final XYPlot candlestick_ta = candlestick_ta_map.get(taEx);

        if (price_volume_ta != null)
            cplot0.remove(price_volume_ta);
        if (candlestick_ta != null)
            cplot1.remove(candlestick_ta);
    }

    if (show && this.activeTAExs.contains(taEx) == false) {
        this.activeTAExs.add(taEx);
        JStock.instance().getChartJDialogOptions().add(taEx);
    } else if (!show) {
        this.activeTAExs.remove(taEx);
        JStock.instance().getChartJDialogOptions().remove(taEx);
    }
}