Charts JFreeChart:图表的背景用黑色覆盖

Charts JFreeChart:图表的背景用黑色覆盖,charts,jfreechart,Charts,Jfreechart,我创建了以下饼图: public class MyPieChart extends ChartComposite { public MyPieChart(Composite parent, int style, CategoryToPieDataset dataset, ProductivityViewCtrl control) { super(/* Composite comp */parent, /* int style */style, /* JFreeChart

我创建了以下饼图:

public class MyPieChart extends ChartComposite {

public MyPieChart(Composite parent, int style, CategoryToPieDataset dataset, ProductivityViewCtrl control) {
    super(/* Composite comp */parent,
    /* int style */style,
    /* JFreeChart jfreechart */null,
    /* int width */10,
    /* int height */10,
    /* int minimumDrawW */1,
    /* int minimumDrawH */1,
    /* int maximumDrawW */Integer.MAX_VALUE,
    /* int maximumDrawH */Integer.MAX_VALUE,
    /* boolean usingBuffer */false,
    /* boolean properties */false,
    /* boolean save */false,
    /* boolean print */false,
    /* boolean zoom */false,
    /* boolean tooltips */true);


    ChartFactory.setChartTheme(new StandardChartTheme("JFree/Shadow"));


    String machineName = "Dummy";
    JFreeChart chart = ChartFactory.createPieChart(machineName, // chart title
            createDataset(), // data
            true, // include legend
            true, false);


    this.setChart(chart);
    chart.setBackgroundPaint(Color.LIGHT_GRAY.brighter());              
    chart.setAntiAlias(true);

    PiePlot plot = (PiePlot) chart.getPlot();
    plot.setBackgroundPaint(Color.GREEN);

    plot.setInteriorGap(0.04);
    plot.setOutlineVisible(false);

    // Color between the segments
    plot.setBaseSectionOutlinePaint(Color.BLACK);
    plot.setSectionOutlinesVisible(true);
    plot.setBaseSectionOutlineStroke(new BasicStroke(2.0f));

    plot.setLabelFont(new Font("Tahoma", Font.BOLD, 20));
    plot.setLabelLinkPaint(Color.WHITE);
    plot.setLabelLinkStroke(new BasicStroke(2.0f));
    plot.setLabelOutlineStroke(null);
    plot.setLabelPaint(Color.WHITE);
    plot.setLabelBackgroundPaint(null);

    plot.setLabelGenerator(new StandardPieSectionLabelGenerator("({0}) {2}"));
    plot.setToolTipGenerator(new StandardPieToolTipGenerator("{0}: {2}"));

    plot.setNoDataMessage("No data available");
    plot.setIgnoreZeroValues(true);

}

private static PieDataset createDataset() {
    DefaultPieDataset dataset = new DefaultPieDataset();
    dataset.setValue("One", new Double(43.2));
    dataset.setValue("Two", new Double(10.0));
    dataset.setValue("Three", new Double(27.5));
    dataset.setValue("Four", new Double(17.5));
    dataset.setValue("Five", new Double(11.0));
    dataset.setValue("Six", new Double(19.4));
    return dataset;
}
显示此图表时,我得到以下结果:

正如你所看到的,背景不是绿色而是黑色。如果你非常靠近图表的底部看,你会看到一条1像素的绿线,所以从技术上来说,背景是画出来的,但在以后的某个时候会被过度渲染

现在,让我们将数据集设置为null,这将给出预期的结果,背景为绿色:

我做错了什么?如果我有一个有效的数据集,为什么背景会被黑色覆盖

我已经尝试了大约两个小时,但无法解决:/

SSCCEE:

package at.mypackage.views;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;

    import at.mypackage.charts.MyPieChart;


    public class MyView extends ViewPart {

        public static final String ID = "at.mypackage.views.MyView";

        @Override
        public void createPartControl(Composite parent) {
            parent.setLayoutData(new FillLayout(SWT.BORDER));
            MyPieChart chart = new MyPieChart(parent, SWT.BORDER);
        }

        @Override
        public void setFocus() {
            // TODO Auto-generated method stub

        }

}
package at.mypackage.charts;


import java.awt.Color;

import org.eclipse.swt.widgets.Composite;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.experimental.chart.swt.ChartComposite;

public class MyPieChart extends ChartComposite {

    public MyPieChart(Composite parent, int style) {
        super(/* Composite comp */parent,
        /* int style */style,
        /* JFreeChart jfreechart */null,
        /* int width */10,
        /* int height */10,
        /* int minimumDrawW */1,
        /* int minimumDrawH */1,
        /* int maximumDrawW */Integer.MAX_VALUE,
        /* int maximumDrawH */Integer.MAX_VALUE,
        /* boolean usingBuffer */false,
        /* boolean properties */false,
        /* boolean save */false,
        /* boolean print */false,
        /* boolean zoom */false,
        /* boolean tooltips */true);

        JFreeChart chart = ChartFactory.createPieChart("Dummy", // chart title
                createDataset(), // data
                true, // include legend
                true, false);

        this.setChart(chart);
        chart.setBackgroundPaint(Color.LIGHT_GRAY.brighter());              

        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setBackgroundPaint(Color.GREEN);       

    }

    private static PieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("One", new Double(43.2));
        dataset.setValue("Two", new Double(10.0));
        dataset.setValue("Three", new Double(27.5));
        dataset.setValue("Four", new Double(17.5));
        dataset.setValue("Five", new Double(11.0));
        dataset.setValue("Six", new Double(19.4));
        return dataset;
    }



}
该图表是eclispe RCP内视图的一部分,其中
MyView
注册在
ID下,
该ID也存储在全局最终变量
ID
的类
MyView

我使用以下命令创建视图:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(MyView.ID);
MyView:

package at.mypackage.views;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;

    import at.mypackage.charts.MyPieChart;


    public class MyView extends ViewPart {

        public static final String ID = "at.mypackage.views.MyView";

        @Override
        public void createPartControl(Composite parent) {
            parent.setLayoutData(new FillLayout(SWT.BORDER));
            MyPieChart chart = new MyPieChart(parent, SWT.BORDER);
        }

        @Override
        public void setFocus() {
            // TODO Auto-generated method stub

        }

}
package at.mypackage.charts;


import java.awt.Color;

import org.eclipse.swt.widgets.Composite;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.experimental.chart.swt.ChartComposite;

public class MyPieChart extends ChartComposite {

    public MyPieChart(Composite parent, int style) {
        super(/* Composite comp */parent,
        /* int style */style,
        /* JFreeChart jfreechart */null,
        /* int width */10,
        /* int height */10,
        /* int minimumDrawW */1,
        /* int minimumDrawH */1,
        /* int maximumDrawW */Integer.MAX_VALUE,
        /* int maximumDrawH */Integer.MAX_VALUE,
        /* boolean usingBuffer */false,
        /* boolean properties */false,
        /* boolean save */false,
        /* boolean print */false,
        /* boolean zoom */false,
        /* boolean tooltips */true);

        JFreeChart chart = ChartFactory.createPieChart("Dummy", // chart title
                createDataset(), // data
                true, // include legend
                true, false);

        this.setChart(chart);
        chart.setBackgroundPaint(Color.LIGHT_GRAY.brighter());              

        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setBackgroundPaint(Color.GREEN);       

    }

    private static PieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("One", new Double(43.2));
        dataset.setValue("Two", new Double(10.0));
        dataset.setValue("Three", new Double(27.5));
        dataset.setValue("Four", new Double(17.5));
        dataset.setValue("Five", new Double(11.0));
        dataset.setValue("Six", new Double(19.4));
        return dataset;
    }



}
MyPieChart:

package at.mypackage.views;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;

    import at.mypackage.charts.MyPieChart;


    public class MyView extends ViewPart {

        public static final String ID = "at.mypackage.views.MyView";

        @Override
        public void createPartControl(Composite parent) {
            parent.setLayoutData(new FillLayout(SWT.BORDER));
            MyPieChart chart = new MyPieChart(parent, SWT.BORDER);
        }

        @Override
        public void setFocus() {
            // TODO Auto-generated method stub

        }

}
package at.mypackage.charts;


import java.awt.Color;

import org.eclipse.swt.widgets.Composite;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.experimental.chart.swt.ChartComposite;

public class MyPieChart extends ChartComposite {

    public MyPieChart(Composite parent, int style) {
        super(/* Composite comp */parent,
        /* int style */style,
        /* JFreeChart jfreechart */null,
        /* int width */10,
        /* int height */10,
        /* int minimumDrawW */1,
        /* int minimumDrawH */1,
        /* int maximumDrawW */Integer.MAX_VALUE,
        /* int maximumDrawH */Integer.MAX_VALUE,
        /* boolean usingBuffer */false,
        /* boolean properties */false,
        /* boolean save */false,
        /* boolean print */false,
        /* boolean zoom */false,
        /* boolean tooltips */true);

        JFreeChart chart = ChartFactory.createPieChart("Dummy", // chart title
                createDataset(), // data
                true, // include legend
                true, false);

        this.setChart(chart);
        chart.setBackgroundPaint(Color.LIGHT_GRAY.brighter());              

        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setBackgroundPaint(Color.GREEN);       

    }

    private static PieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("One", new Double(43.2));
        dataset.setValue("Two", new Double(10.0));
        dataset.setValue("Three", new Double(27.5));
        dataset.setValue("Four", new Double(17.5));
        dataset.setValue("Five", new Double(11.0));
        dataset.setValue("Six", new Double(19.4));
        return dataset;
    }



}

禁用阴影生成器修复了问题:)


它在JfreeChart中使用1.14版。您使用的是什么版本的JFreeChart?您能提供一个?您正在尝试创建Eclipse插件吗?我正在使用jfreechart 1.0.14。它是我接管的eclipse应用程序的一部分。我已经使用这个API实现了各种堆叠条形图。我会尽快提供SSCCE!我用SSCCEE更新了我的帖子。由于这是一个elcipse RCP,它不是100%自我包容的,但我尽了最大努力。我也可能尝试升级我的jfreechart版本,但我担心它会破坏一些东西,因为我正在使用的应用程序已经开发了几年。我从我的老板那里得知,以前的开发人员采用jfreechart来与SWT一起工作,并且这个错误可能在他的新实现中(如果我修改JFreeChart示例代码,使其包含
plot.setBackgroundPaint(Color.GREEN);
,则它可以正常工作,并按预期更改颜色