Package org.hxzon.netprotocol.ui.statistics

Source Code of org.hxzon.netprotocol.ui.statistics.StatisticsPaintPanel

package org.hxzon.netprotocol.ui.statistics;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.util.List;

import javax.swing.JPanel;

import org.hxzon.util.My1024NumberFormat;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.labels.XYToolTipGenerator;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.ui.RectangleInsets;

@SuppressWarnings("serial")
public class StatisticsPaintPanel extends JPanel {

    private Rectangle viewRect;
    private StatisticsPaintModel model;

    private final ValueAxis timeAxis;
    private final NumberAxis valueAxis;
    private final XYLineAndShapeRenderer rendererPer100;
    private final XYLineAndShapeRenderer rendererPer1000;
    private final XYPlot plot;
    private final JFreeChart chart;
    private final ChartPanel chartPanel;
    private static final Shape shape = new Ellipse2D.Double(-2, -2, 4, 4);

    public StatisticsPaintPanel() {
        super(new BorderLayout());
        timeAxis = new DateAxis("");
        timeAxis.setLowerMargin(0.02);
        timeAxis.setUpperMargin(0.02);
        valueAxis = new NumberAxis("");
        valueAxis.setAutoRangeIncludesZero(false);
        valueAxis.setStandardTickUnits(JFreechartUtil.create1024IntegerTickUnits());
        valueAxis.setNumberFormatOverride(My1024NumberFormat.getMyNumberFormat());
        XYToolTipGenerator toolTipGenerator = StandardXYToolTipGenerator.getTimeSeriesInstance();

        rendererPer100 = new XYLineAndShapeRendererCustom();
        rendererPer100.setBaseShape(shape);
        rendererPer100.setBaseToolTipGenerator(toolTipGenerator);

        rendererPer1000 = new XYLineAndShapeRendererCustom();
        rendererPer1000.setBaseShape(shape);
        rendererPer1000.setBaseToolTipGenerator(toolTipGenerator);

        EmptyDatasetPlaceholder dataset = new EmptyDatasetPlaceholder();
        plot = new XYPlot(dataset, timeAxis, valueAxis, null);
        plot.setRenderer(rendererPer100);
        plot.setRenderer(1, rendererPer1000);
        plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
        dataset.setupPlot(plot);
        chart = new JFreeChart("", JFreeChart.DEFAULT_TITLE_FONT, plot, true);
        chartPanel = new ChartPanel(chart);
        chartPanel.setFillZoomRectangle(true);
        chartPanel.setMouseWheelEnabled(true);
        this.add(chartPanel);
    }

    public void useAntiAlias(boolean use) {
        chart.setAntiAlias(use);
    }

    public void showData(String name, boolean show) {
        TimeSeriesCollection dataset = model.getDatasetPer100();
        boolean shapeVisible = false;
        for (TimeSeriesEx<StatisticsData> timeSeriesEx : (List<TimeSeriesEx<StatisticsData>>) dataset.getSeries()) {
            StatisticsData data = timeSeriesEx.getUserObject();
            int seriesIndex = dataset.indexOf(timeSeriesEx);
            rendererPer100.setSeriesLinesVisible(seriesIndex, data.isShow());
            shapeVisible = data.isShow() && timeSeriesEx.getItemCount() == 1;
            rendererPer100.setSeriesShapesVisible(seriesIndex, shapeVisible);
        }
        dataset = model.getDatasetPer1000();
        for (TimeSeriesEx<StatisticsData> timeSeriesEx : (List<TimeSeriesEx<StatisticsData>>) dataset.getSeries()) {
            StatisticsData data = timeSeriesEx.getUserObject();
            int seriesIndex = dataset.indexOf(timeSeriesEx);
            rendererPer1000.setSeriesLinesVisible(seriesIndex, data.isShow());
            shapeVisible = data.isShow() && timeSeriesEx.getItemCount() == 1;
            rendererPer1000.setSeriesShapesVisible(seriesIndex, shapeVisible);
        }
    }

    public void showDataPer100(boolean b) {
        rendererPer100.setBaseShapesVisible(b);
        rendererPer1000.setBaseShapesVisible(!b);
        for (int i = 0; i < 5; i++) {
            rendererPer100.setSeriesVisible(i, b);
            rendererPer1000.setSeriesVisible(i, !b);
        }
    }

    public void updateForPacketNumOrBitNum() {
        plot.setDataset(model.getDatasetPer100());
        plot.setDataset(1, model.getDatasetPer1000());

        TimeSeriesCollection dataset = model.getDatasetPer100();
        boolean shapeVisible = false;
        for (TimeSeriesEx<StatisticsData> timeSeriesEx : (List<TimeSeriesEx<StatisticsData>>) dataset.getSeries()) {
            StatisticsData data = timeSeriesEx.getUserObject();
            int seriesIndex = dataset.indexOf(timeSeriesEx);
            rendererPer100.setSeriesPaint(seriesIndex, data.getColor());
            rendererPer100.setSeriesVisible(seriesIndex, model.isPer100());
            rendererPer100.setSeriesLinesVisible(seriesIndex, data.isShow());
            shapeVisible = data.isShow() && timeSeriesEx.getItemCount() == 1;
            rendererPer100.setSeriesShapesVisible(seriesIndex, shapeVisible);
        }
        dataset = model.getDatasetPer1000();
        for (TimeSeriesEx<StatisticsData> timeSeriesEx : (List<TimeSeriesEx<StatisticsData>>) dataset.getSeries()) {
            StatisticsData data = timeSeriesEx.getUserObject();
            int seriesIndex = dataset.indexOf(timeSeriesEx);
            rendererPer1000.setSeriesPaint(seriesIndex, data.getColor());
            rendererPer1000.setSeriesVisible(seriesIndex, !model.isPer100());
            rendererPer1000.setSeriesLinesVisible(seriesIndex, data.isShow());
            shapeVisible = data.isShow() && timeSeriesEx.getItemCount() == 1;
            rendererPer1000.setSeriesShapesVisible(seriesIndex, shapeVisible);
        }
        chartPanel.restoreAutoBounds();

    }

    public StatisticsPaintModel getModel() {
        return model;
    }

    public void setViewSize(Rectangle size) {
        if (size.equals(viewRect)) {
            return;
        }
        this.viewRect = size;
        if (model != null) {
            updateForPacketNumOrBitNum();
        }
    }

    public Dimension getPreferredSize() {
        if (viewRect != null) {
            return new Dimension(viewRect.width, viewRect.height);
        }
        return new Dimension(800, 600);
    }

    public void setModel(StatisticsPaintModel model) {
        this.model = model;
        updateForPacketNumOrBitNum();
    }

}
TOP

Related Classes of org.hxzon.netprotocol.ui.statistics.StatisticsPaintPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.