xyplottests.java

来自「JfreeChart 常用图表例子」· Java 代码 · 共 792 行 · 第 1/2 页

JAVA
792
字号
        assertTrue(p1.equals(p2));                p1.mapDatasetToDomainAxis(2, 1);        assertFalse(p1.equals(p2));        p2.mapDatasetToDomainAxis(2, 1);        assertTrue(p1.equals(p2));        p1.getRangeAxis().setLabel("Label");        assertFalse(p1.equals(p2));        p2.getRangeAxis().setLabel("Label");        assertTrue(p1.equals(p2));                p1.getRangeAxis(1).setLabel("S1");        assertFalse(p1.equals(p2));        p2.getRangeAxis(1).setLabel("S1");        assertTrue(p1.equals(p2));                p1.setRangeAxisLocation(1, AxisLocation.TOP_OR_LEFT);        assertFalse(p1.equals(p2));        p2.setRangeAxisLocation(1, AxisLocation.TOP_OR_LEFT);        assertTrue(p1.equals(p2));                p1.mapDatasetToRangeAxis(2, 1);        assertFalse(p1.equals(p2));        p2.mapDatasetToRangeAxis(2, 1);        assertTrue(p1.equals(p2));        p1.getRenderer().setOutlinePaint(Color.cyan);        assertFalse(p1.equals(p2));        p2.getRenderer().setOutlinePaint(Color.cyan);        assertTrue(p1.equals(p2));                p1.getRenderer(1).setOutlinePaint(Color.red);        assertFalse(p1.equals(p2));        p2.getRenderer(1).setOutlinePaint(Color.red);        assertTrue(p1.equals(p2));            }        /**     * Setting a null renderer should be allowed, but is generating a null      * pointer exception in 0.9.7.     */    public void testSetNullRenderer() {        boolean failed = false;        try {            XYPlot plot = new XYPlot(                null, new NumberAxis("X"), new NumberAxis("Y"), null            );            plot.setRenderer(null);        }        catch (Exception e) {            failed = true;        }        assertTrue(!failed);    }    /**     * Serialize an instance, restore it, and check for equality.     */    public void testSerialization1() {        XYDataset data = new XYSeriesCollection();        NumberAxis domainAxis = new NumberAxis("Domain");        NumberAxis rangeAxis = new NumberAxis("Range");        StandardXYItemRenderer renderer = new StandardXYItemRenderer();        XYPlot p1 = new XYPlot(data, domainAxis, rangeAxis, renderer);        XYPlot p2 = null;        try {            ByteArrayOutputStream buffer = new ByteArrayOutputStream();            ObjectOutput out = new ObjectOutputStream(buffer);            out.writeObject(p1);            out.close();            ObjectInput in = new ObjectInputStream(                new ByteArrayInputStream(buffer.toByteArray())            );            p2 = (XYPlot) in.readObject();            in.close();        }        catch (Exception e) {            fail(e.toString());        }        assertEquals(p1, p2);    }    /**     * Serialize an instance, restore it, and check for equality.  This test      * uses a {@link DateAxis} and a {@link StandardXYToolTipGenerator}.     */    public void testSerialization2() {        IntervalXYDataset data1 = createDataset1();        XYItemRenderer renderer1 = new XYBarRenderer(0.20);        renderer1.setToolTipGenerator(            StandardXYToolTipGenerator.getTimeSeriesInstance()        );        XYPlot p1 = new XYPlot(data1, new DateAxis("Date"), null, renderer1);        XYPlot p2 = null;        try {            ByteArrayOutputStream buffer = new ByteArrayOutputStream();            ObjectOutput out = new ObjectOutputStream(buffer);            out.writeObject(p1);            out.close();            ObjectInput in = new ObjectInputStream(                new ByteArrayInputStream(buffer.toByteArray())            );            p2 = (XYPlot) in.readObject();            in.close();        }        catch (Exception e) {            fail(e.toString());        }        assertEquals(p1, p2);    }    /**     * Problem to reproduce a bug in serialization.  The bug (first reported      * against the {@link org.jfree.chart.plot.CategoryPlot} class) is a null      * pointer exception that occurs when drawing a plot after deserialization.     * It is caused by four temporary storage structures (axesAtTop,      * axesAtBottom, axesAtLeft and axesAtRight - all initialized as empty      * lists in the constructor) not being initialized by the readObject()      * method following deserialization.  This test has been written to      * reproduce the bug (now fixed).     */    public void testSerialization3() {                XYSeriesCollection dataset = new XYSeriesCollection();        JFreeChart chart = ChartFactory.createXYLineChart(            "Test Chart",            "Domain Axis",            "Range Axis",            dataset,            PlotOrientation.VERTICAL,            true,            true,            false        );        JFreeChart chart2 = null;                // serialize and deserialize the chart....        try {            ByteArrayOutputStream buffer = new ByteArrayOutputStream();            ObjectOutput out = new ObjectOutputStream(buffer);            out.writeObject(chart);            out.close();            ObjectInput in = new ObjectInputStream(                new ByteArrayInputStream(buffer.toByteArray())            );            chart2 = (JFreeChart) in.readObject();            in.close();        }        catch (Exception e) {            fail(e.toString());        }        boolean b = chart.equals(chart2);        System.out.println(b);        assertEquals(chart, chart2);        boolean passed = true;        try {            chart2.createBufferedImage(300, 200);        }        catch (Exception e) {            passed = false;              e.printStackTrace();                    }        assertTrue(passed);    }        /**     * A test to reproduce a bug in serialization: the domain and/or range     * markers for a plot are not being serialized.     */    public void testSerialization4() {                XYSeriesCollection dataset = new XYSeriesCollection();        JFreeChart chart = ChartFactory.createXYLineChart(            "Test Chart",            "Domain Axis",            "Range Axis",            dataset,            PlotOrientation.VERTICAL,            true,            true,            false        );        XYPlot plot = (XYPlot) chart.getPlot();        plot.addDomainMarker(new ValueMarker(1.0), Layer.FOREGROUND);        plot.addDomainMarker(new IntervalMarker(2.0, 3.0), Layer.BACKGROUND);        plot.addRangeMarker(new ValueMarker(4.0), Layer.FOREGROUND);        plot.addRangeMarker(new IntervalMarker(5.0, 6.0), Layer.BACKGROUND);        JFreeChart chart2 = null;                // serialize and deserialize the chart....        try {            ByteArrayOutputStream buffer = new ByteArrayOutputStream();            ObjectOutput out = new ObjectOutputStream(buffer);            out.writeObject(chart);            out.close();            ObjectInput in = new ObjectInputStream(                new ByteArrayInputStream(buffer.toByteArray())            );            chart2 = (JFreeChart) in.readObject();            in.close();        }        catch (Exception e) {            fail(e.toString());        }        assertEquals(chart, chart2);        boolean passed = true;        try {            chart2.createBufferedImage(300, 200);        }        catch (Exception e) {            passed = false;              e.printStackTrace();                    }        assertTrue(passed);    }        /**     * Tests a bug where the plot is no longer registered as a listener     * with the dataset(s) and axes after deserialization.  See patch 1209475     * at SourceForge.     */    public void testSerialization5() {        XYSeriesCollection dataset1 = new XYSeriesCollection();        NumberAxis domainAxis1 = new NumberAxis("Domain 1");        NumberAxis rangeAxis1 = new NumberAxis("Range 1");        StandardXYItemRenderer renderer1 = new StandardXYItemRenderer();        XYPlot p1 = new XYPlot(dataset1, domainAxis1, rangeAxis1, renderer1);        NumberAxis domainAxis2 = new NumberAxis("Domain 2");        NumberAxis rangeAxis2 = new NumberAxis("Range 2");        StandardXYItemRenderer renderer2 = new StandardXYItemRenderer();        XYSeriesCollection dataset2 = new XYSeriesCollection();        p1.setDataset(1, dataset2);        p1.setDomainAxis(1, domainAxis2);        p1.setRangeAxis(1, rangeAxis2);        p1.setRenderer(1, renderer2);        XYPlot p2 = null;        try {            ByteArrayOutputStream buffer = new ByteArrayOutputStream();            ObjectOutput out = new ObjectOutputStream(buffer);            out.writeObject(p1);            out.close();            ObjectInput in = new ObjectInputStream(                new ByteArrayInputStream(buffer.toByteArray())            );            p2 = (XYPlot) in.readObject();            in.close();        }        catch (Exception e) {            fail(e.toString());        }        assertEquals(p1, p2);                // now check that all datasets, renderers and axes are being listened         // too...        NumberAxis domainAxisA = (NumberAxis) p2.getDomainAxis(0);        NumberAxis rangeAxisA = (NumberAxis) p2.getRangeAxis(0);        XYSeriesCollection datasetA = (XYSeriesCollection) p2.getDataset(0);        StandardXYItemRenderer rendererA             = (StandardXYItemRenderer) p2.getRenderer(0);        NumberAxis domainAxisB = (NumberAxis) p2.getDomainAxis(1);        NumberAxis rangeAxisB = (NumberAxis) p2.getRangeAxis(1);        XYSeriesCollection datasetB = (XYSeriesCollection) p2.getDataset(1);        StandardXYItemRenderer rendererB             = (StandardXYItemRenderer) p2.getRenderer(1);        assertTrue(datasetA.hasListener(p2));        assertTrue(domainAxisA.hasListener(p2));        assertTrue(rangeAxisA.hasListener(p2));        assertTrue(rendererA.hasListener(p2));        assertTrue(datasetB.hasListener(p2));        assertTrue(domainAxisB.hasListener(p2));        assertTrue(rangeAxisB.hasListener(p2));        assertTrue(rendererB.hasListener(p2));    }    /**     * Some checks for the getRendererForDataset() method.     */    public void testGetRendererForDataset() {        XYDataset d0 = new XYSeriesCollection();        XYDataset d1 = new XYSeriesCollection();        XYDataset d2 = new XYSeriesCollection();        XYDataset d3 = new XYSeriesCollection();  // not used by plot        XYItemRenderer r0 = new XYLineAndShapeRenderer();        XYItemRenderer r2 = new XYLineAndShapeRenderer();        XYPlot plot = new XYPlot();        plot.setDataset(0, d0);        plot.setDataset(1, d1);        plot.setDataset(2, d2);        plot.setRenderer(0, r0);        // no renderer 1        plot.setRenderer(2, r2);        assertEquals(r0, plot.getRendererForDataset(d0));        assertEquals(r0, plot.getRendererForDataset(d1));        assertEquals(r2, plot.getRendererForDataset(d2));        assertEquals(null, plot.getRendererForDataset(d3));        assertEquals(null, plot.getRendererForDataset(null));    }    /**     * Some checks for the getLegendItems() method.     */    public void testGetLegendItems() {        // check the case where there is a secondary dataset that doesn't         // have a renderer (i.e. falls back to renderer 0)        XYDataset d0 = createDataset1();        XYDataset d1 = createDataset2();        XYItemRenderer r0 = new XYLineAndShapeRenderer();        XYPlot plot = new XYPlot();        plot.setDataset(0, d0);        plot.setDataset(1, d1);        plot.setRenderer(0, r0);        LegendItemCollection items = plot.getLegendItems();        assertEquals(2, items.getItemCount());    }        /**     * Creates a sample dataset.     *     * @return Series 1.     */    private IntervalXYDataset createDataset1() {        // create dataset 1...        TimeSeries series1 = new TimeSeries("Series 1", Day.class);        series1.add(new Day(1, MonthConstants.MARCH, 2002), 12353.3);        series1.add(new Day(2, MonthConstants.MARCH, 2002), 13734.4);        series1.add(new Day(3, MonthConstants.MARCH, 2002), 14525.3);        series1.add(new Day(4, MonthConstants.MARCH, 2002), 13984.3);        series1.add(new Day(5, MonthConstants.MARCH, 2002), 12999.4);        series1.add(new Day(6, MonthConstants.MARCH, 2002), 14274.3);        series1.add(new Day(7, MonthConstants.MARCH, 2002), 15943.5);        series1.add(new Day(8, MonthConstants.MARCH, 2002), 14845.3);        series1.add(new Day(9, MonthConstants.MARCH, 2002), 14645.4);        series1.add(new Day(10, MonthConstants.MARCH, 2002), 16234.6);        series1.add(new Day(11, MonthConstants.MARCH, 2002), 17232.3);        series1.add(new Day(12, MonthConstants.MARCH, 2002), 14232.2);        series1.add(new Day(13, MonthConstants.MARCH, 2002), 13102.2);        series1.add(new Day(14, MonthConstants.MARCH, 2002), 14230.2);        series1.add(new Day(15, MonthConstants.MARCH, 2002), 11235.2);        TimeSeriesCollection collection = new TimeSeriesCollection(series1);        collection.setDomainIsPointsInTime(false);              // this tells the time series collection that            // we intend the data to represent time periods            // NOT points in time.  This is required when            // determining the min/max values in the            // dataset's domain.        return collection;    }    /**     * Creates a sample dataset.     *     * @return A sample dataset.     */    private XYDataset createDataset2() {        // create dataset 1...        XYSeries series = new XYSeries("Series 2");        XYSeriesCollection collection = new XYSeriesCollection(series);        return collection;    }        /**     * A test for a bug where setting the renderer doesn't register the plot     * as a RendererChangeListener.     */    public void testSetRenderer() {        XYPlot plot = new XYPlot();        XYItemRenderer renderer = new XYLineAndShapeRenderer();        plot.setRenderer(renderer);        // now make a change to the renderer and see if it triggers a plot        // change event...        MyPlotChangeListener listener = new MyPlotChangeListener();        plot.addChangeListener(listener);        renderer.setSeriesPaint(0, Color.black);        assertTrue(listener.getEvent() != null);    }    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?