Java StackedXYAreaChart-始终显示错误的序列号

Java StackedXYAreaChart-始终显示错误的序列号,java,jfreechart,Java,Jfreechart,我使用ChartFactory实用程序构建了一个stackedXYAreaChart。我正在尝试生成自定义工具提示。我观察到一个非常奇怪的输出。我的系列4行永远不可见,工具提示也永远不显示。 我做错了什么 这是我的密码: package test; import java.awt.geom.Ellipse2D; import javax.swing.JFrame; import org.jfree.chart.ChartFactory; import org.jfree.chart.Char

我使用ChartFactory实用程序构建了一个stackedXYAreaChart。我正在尝试生成自定义工具提示。我观察到一个非常奇怪的输出。我的系列4行永远不可见,工具提示也永远不显示。 我做错了什么

这是我的密码:

package test;


import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.xy.StackedXYAreaRenderer;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimePeriod;
import org.jfree.data.time.TimeTableXYDataset;

public class Test2
{
public static void main(String args[])
{
    TimeTableXYDataset dataset = new TimeTableXYDataset();
    for( int i=0; i< 10; i++)
    {
        TimePeriod period = new Millisecond();
        dataset.add(period, i, "Series 1");
        dataset.add(period, i + 5, "Series 2");
        dataset.add(period, i + 10, "Series 3");
                    dataset.add(period, i + 15 , "Series 4");
    }

    JFreeChart chart = ChartFactory.createStackedXYAreaChart(
            "Sample Chart", "Time", "Size", dataset, PlotOrientation.VERTICAL, true, true, false);
            StackedXYAreaRenderer render = new StackedXYAreaRenderer();
            //render.setSeriesShape(0, new Ellipse2D.Double(-3.0, -3.0, 6.0, 6.0));
            render.setSeriesToolTipGenerator(0, new StandardXYToolTipGenerator());
                            render.setSeriesToolTipGenerator(1, new StandardXYToolTipGenerator());
                            render.setSeriesToolTipGenerator(2, new StandardXYToolTipGenerator());
                            render.setSeriesToolTipGenerator(3, new StandardXYToolTipGenerator());
                            chart.getXYPlot().setRenderer(render);


            ChartPanel panel = new ChartPanel(chart);
                            panel.setMouseWheelEnabled(true);
            JFrame frame = new JFrame();
            frame.add(panel);
                            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
}
}
封装测试;
导入java.awt.geom.Ellipse2D;
导入javax.swing.JFrame;
导入org.jfree.chart.ChartFactory;
导入org.jfree.chart.ChartPanel;
导入org.jfree.chart.JFreeChart;
导入org.jfree.chart.labels.StandardXYToolTipGenerator;
导入org.jfree.chart.plot.PlotOrientation;
导入org.jfree.chart.renderer.xy.StackedXYAreaRenderer;
导入org.jfree.data.time.毫秒;
导入org.jfree.data.time.TimePeriod;
导入org.jfree.data.time.TimeTableXYDataset;
公共类Test2
{
公共静态void main(字符串参数[])
{
TimeTableXYDataset dataset=新的TimeTableXYDataset();
对于(int i=0;i<10;i++)
{
时间周期=新毫秒();
添加数据集(期间,i,“系列1”);
添加数据集(期间,i+5,“系列2”);
添加数据集(期间,i+10,“系列3”);
添加数据集(期间,i+15,“系列4”);
}
JFreeChart chart=ChartFactory.createStackedXYAreaChart(
“样本图”、“时间”、“大小”、数据集、绘图方向、垂直、真、真、假);
StackedXYAreaRenderer render=新的StackedXYAreaRenderer();
//render.setSeriesShape(0,新的Ellipse2D.Double(-3.0,-3.0,6.0,6.0));
render.SetSeriesToltipGenerator(0,新标准XYToolTipGenerator());
render.SetSeriesToltipGenerator(1,新标准XYToolTipGenerator());
render.SetSeriesToltipGenerator(2,新标准XYToolTipGenerator());
render.SetSeriesToltipGenerator(3,新标准XYToolTipGenerator());
chart.getXYPlot().setRenderer(渲染);
ChartPanel面板=新的ChartPanel(图表);
panel.setMouseWheelEnabled(真);
JFrame=新JFrame();
框架。添加(面板);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}

修改由factory方法创建的
StackedXYAreaRenderer 2
而不是创建新的
StackedXYAreaRenderer

或者,使用作为创建自定义图表的指南

import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StackedXYAreaRenderer2;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimePeriod;
import org.jfree.data.time.TimeTableXYDataset;

public class Test2 {

    public static void main(String args[]) {
        TimeTableXYDataset dataset = new TimeTableXYDataset();
        for (int i = 0; i < 10; i++) {
            TimePeriod period = new Millisecond();
            dataset.add(period, i, "Series 1");
            dataset.add(period, i + 5, "Series 2");
            dataset.add(period, i + 10, "Series 3");
            dataset.add(period, i + 15, "Series 4");
        }

        JFreeChart chart = ChartFactory.createStackedXYAreaChart(
            "Sample Chart", "Time", "Size", dataset, PlotOrientation.VERTICAL, true, true, false);
        XYPlot plot = (XYPlot) chart.getPlot();
        StackedXYAreaRenderer2 render = (StackedXYAreaRenderer2) plot.getRenderer();
        render.setSeriesToolTipGenerator(0, new StandardXYToolTipGenerator());
        render.setSeriesToolTipGenerator(1, new StandardXYToolTipGenerator());
        render.setSeriesToolTipGenerator(2, new StandardXYToolTipGenerator());
        render.setSeriesToolTipGenerator(3, new StandardXYToolTipGenerator());
        chart.getXYPlot().setRenderer(render);

        ChartPanel panel = new ChartPanel(chart);
        panel.setMouseWheelEnabled(true);
        JFrame frame = new JFrame();
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

import javax.swing.JFrame;
导入org.jfree.chart.ChartFactory;
导入org.jfree.chart.ChartPanel;
导入org.jfree.chart.JFreeChart;
导入org.jfree.chart.labels.StandardXYToolTipGenerator;
导入org.jfree.chart.plot.PlotOrientation;
导入org.jfree.chart.plot.XYPlot;
导入org.jfree.chart.renderer.xy.StackedXYAreaRenderer2;
导入org.jfree.data.time.毫秒;
导入org.jfree.data.time.TimePeriod;
导入org.jfree.data.time.TimeTableXYDataset;
公共类Test2{
公共静态void main(字符串参数[]){
TimeTableXYDataset dataset=新的TimeTableXYDataset();
对于(int i=0;i<10;i++){
时间周期=新毫秒();
添加数据集(期间,i,“系列1”);
添加数据集(期间,i+5,“系列2”);
添加数据集(期间,i+10,“系列3”);
添加数据集(期间,i+15,“系列4”);
}
JFreeChart chart=ChartFactory.createStackedXYAreaChart(
“样本图”、“时间”、“大小”、数据集、绘图方向、垂直、真、真、假);
XYPlot=(XYPlot)chart.getPlot();
StackedXYAreaRenderer2 render=(StackedXYAreaRenderer2)plot.getRenderer();
render.SetSeriesToltipGenerator(0,新标准XYToolTipGenerator());
render.SetSeriesToltipGenerator(1,新标准XYToolTipGenerator());
render.SetSeriesToltipGenerator(2,新标准XYToolTipGenerator());
render.SetSeriesToltipGenerator(3,新标准XYToolTipGenerator());
chart.getXYPlot().setRenderer(渲染);
ChartPanel面板=新的ChartPanel(图表);
panel.setMouseWheelEnabled(真);
JFrame=新JFrame();
框架。添加(面板);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}

StackedXYArea渲染器支持形状。将渲染器用作:

StackedXYAreaRenderer render = new StackedXYAreaRenderer(StackedXYAreaRenderer.AREA_AND_SHAPES);

StackedXYAreaRender2不支持形状

这绝对有帮助。还有一个问题-我需要在每个数据点显示形状。我不能那样做。你知道吗@垃圾桶
StackedXYAreaRenderer2
不支持建议的形状;您需要使用
StackedXYAreaRenderer
创建图表,它确实可以。
StackedXYAreaRenderer render = new StackedXYAreaRenderer(StackedXYAreaRenderer.AREA_AND_SHAPES);