Jfreechart与滚动条 [英] Jfreechart with scroller

查看:359
本文介绍了Jfreechart与滚动条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在图表中添加一个滚动条,以便查看不适合屏幕的大数据集,因为要保留所有xtick。但是,我收到以下错误消息:

I wanted to add to the chart a scroll bar in order to view big datasets which did not fit on the screen, because to keep all xtick. However, I got the following error message:

Exception in thread "main" java.lang.ClassCastException: org.jfree.data.xy.XYSeriesCollection cannot be cast to org.jfree.data.category.CategoryDataset
    at MySlidingCategoryDatasetDemo3$DemoPanel.<init>(MySlidingCategoryDatasetDemo3.java:86)
    at MySlidingCategoryDatasetDemo3.createDemoPanel(MySlidingCategoryDatasetDemo3.java:112)
    at MySlidingCategoryDatasetDemo3.<init>(MySlidingCategoryDatasetDemo3.java:107)
    at MySlidingCategoryDatasetDemo3.main(MySlidingCategoryDatasetDemo3.java:117)

使用以下代码:

import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.jfree.data.category.*;
import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.category.*;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

public class MySlidingCategoryDatasetDemo3 extends ApplicationFrame
{
    static class DemoPanel extends JPanel
        implements ChangeListener
    {
        private static XYDataset createDataset()
        {
            XYSeries xyseries = new XYSeries("First");
            xyseries.add(1.0D, 1.0D);
            xyseries.add(2D, 4D);
            xyseries.add(3D, 3D);
            xyseries.add(4D, 5D);
            xyseries.add(5D, 5D);
            xyseries.add(6D, 7D);
            xyseries.add(7D, 7D);
            xyseries.add(8D, 8D);
            xyseries.add(9D, 8D);
            xyseries.add(10D, 8D);
            xyseries.add(11D, 8D);
            xyseries.add(12D, 8D);
            xyseries.add(13D, 8D);
            xyseries.add(14D, 8D);
            xyseries.add(15D, 8D);
            xyseries.add(16D, 25D);
            xyseries.add(17D, 8D);
            xyseries.add(18D, 5D);
            xyseries.add(19D, 7D);
            xyseries.add(20D, 6D);
            xyseries.add(21D, 8D);
            xyseries.add(22D, 4D);
            xyseries.add(23D, 4D);
            xyseries.add(24D, 2D);
            xyseries.add(25D, 1.0D);

            XYSeriesCollection xyseriescollection = new XYSeriesCollection();
            xyseriescollection.addSeries(xyseries);

            return xyseriescollection;
        }   

        private static JFreeChart createChart(XYDataset xydataset)
        {
            JFreeChart jfreechart = ChartFactory.createXYLineChart("Line Chart Demo 2", "X", "Y", xydataset, PlotOrientation.VERTICAL, true, true, false);
            XYPlot xyplot = (XYPlot)jfreechart.getPlot();
            xyplot.setDomainPannable(true);
            xyplot.setRangePannable(true);

            StandardXYItemRenderer xylineandshaperenderer = (StandardXYItemRenderer)xyplot.getRenderer();
            xylineandshaperenderer.setBaseShapesVisible(true);
            xylineandshaperenderer.setBaseShapesFilled(true);
            NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();
            numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
            numberaxis.setRange(0.0D, 100D);
            return jfreechart;
        }

        public void stateChanged(ChangeEvent changeevent)
        {
            dataset.setFirstCategoryIndex(scroller.getValue());
        }

        JScrollBar scroller;
        SlidingCategoryDataset dataset;

        public DemoPanel()
        {
            super(new BorderLayout());
            dataset = new SlidingCategoryDataset((CategoryDataset) createDataset(), 0, 10);
            JFreeChart jfreechart = createChart((XYDataset) dataset);
            //JFreeChart jfreechart = createChart(createDataset());
            ChartPanel chartpanel = new ChartPanel(jfreechart);

            chartpanel.setPreferredSize(new Dimension(400, 400));
            scroller = new JScrollBar(0, 0, 10, 0, 50);
            add(chartpanel);
            scroller.getModel().addChangeListener(this);
            JPanel jpanel = new JPanel(new BorderLayout());
            jpanel.add(scroller);
            jpanel.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
            jpanel.setBackground(Color.white);
            add(jpanel, "South");
        }
    }

    public MySlidingCategoryDatasetDemo3(String s)
    {
        super(s);
        setDefaultCloseOperation(3);
        setContentPane(createDemoPanel());
    }

    public static JPanel createDemoPanel()
    {
        return new DemoPanel();
    }

    public static void main(String args[])
    {
        MySlidingCategoryDatasetDemo3 slidingcategorydatasetdemo2 = new MySlidingCategoryDatasetDemo3("JFreeChart: SlidingCategoryDatasetDemo2.java");
        slidingcategorydatasetdemo2.pack();
        RefineryUtilities.centerFrameOnScreen(slidingcategorydatasetdemo2);
        slidingcategorydatasetdemo2.setVisible(true);
    }
}

我做错了什么?

提前谢谢。

推荐答案

错误信息非常明显:


org.jfree.data.xy.XYSeriesCollection无法转换为org.jfree.data.category.CategoryDataset

org.jfree.data.xy.XYSeriesCollection cannot be cast to org.jfree.data.category.CategoryDataset

您正在将 XYSeriesCollection 对象转换为 CategoryDataset 对象,这不起作用。查看堆栈跟踪中的行,它由以下行引起

You are casting a XYSeriesCollection object to a CategoryDataset object, which does not work. Looking at the lines in the stack trace, it is caused by the following line

dataset = new SlidingCategoryDataset((CategoryDataset) createDataset(), 0, 10);

createDataset()方法返回 XYSeriesCollection 而不是 CategoryDataset ,所以你不能做这个演员。调整该方法的返回类型,或者去掉演员

The createDataset() methods returns a XYSeriesCollection and not a CategoryDataset, so you cannot do this cast. Either adjust the return type of that method, or get rid of the cast

这篇关于Jfreechart与滚动条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆