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);
,则它可以正常工作,并按预期更改颜色