JFreeChart 饼图未在 RCP viewpart 中展开
JFreeChart Pie Chart not expanding in RCP viewpart
使用 GridLayout 时,JFreeChart 饼图不会展开以填充复合面板。我正在尝试在 Eclipse Indigo 的视图部分中使用它,但它似乎只在 shell...
中使用 FillLayout 时才有效
public class SWTPieChart {
public static void main(String[] args) {
JFreeChart chart = createChart(createDataset());
Display display = new Display();
Shell shell = new Shell(display);
shell.setSize(600, 400);
shell.setLayout(new FillLayout());
shell.setText("JFreeChart with GridLayout");
Composite panel = new Composite(shell, SWT.BORDER);
panel.setLayout(new GridLayout(1, true));
panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final ChartComposite frame = new ChartComposite(panel, SWT.NONE, chart, true);
frame.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
}
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;
}
private static JFreeChart createChart(PieDataset dataset) {
JFreeChart chart = ChartFactory.createPieChart3D("3D Pie Chart", dataset, true, true, false);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setSectionOutlinesVisible(true);
plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));
plot.setNoDataMessage("No data available");
plot.setCircular(true);
return chart;
}
}
您错误地将布局数据设置为合成 (panel
) 而不是图表 (frame
)。
由于复合位于 shell 和 FillLayout
中,因此无需设置任何布局数据。
图表位于 GridLayout
的合成内部,因此它必须为其指定布局数据:
Composite panel = new Composite(shell, SWT.BORDER);
panel.setLayout(new GridLayout(1, true));
final ChartComposite frame = new ChartComposite(panel, SWT.NONE, chart, true);
frame.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
使用 GridLayout 时,JFreeChart 饼图不会展开以填充复合面板。我正在尝试在 Eclipse Indigo 的视图部分中使用它,但它似乎只在 shell...
中使用 FillLayout 时才有效public class SWTPieChart {
public static void main(String[] args) {
JFreeChart chart = createChart(createDataset());
Display display = new Display();
Shell shell = new Shell(display);
shell.setSize(600, 400);
shell.setLayout(new FillLayout());
shell.setText("JFreeChart with GridLayout");
Composite panel = new Composite(shell, SWT.BORDER);
panel.setLayout(new GridLayout(1, true));
panel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final ChartComposite frame = new ChartComposite(panel, SWT.NONE, chart, true);
frame.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
}
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;
}
private static JFreeChart createChart(PieDataset dataset) {
JFreeChart chart = ChartFactory.createPieChart3D("3D Pie Chart", dataset, true, true, false);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setSectionOutlinesVisible(true);
plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));
plot.setNoDataMessage("No data available");
plot.setCircular(true);
return chart;
}
}
您错误地将布局数据设置为合成 (panel
) 而不是图表 (frame
)。
由于复合位于 shell 和 FillLayout
中,因此无需设置任何布局数据。
图表位于 GridLayout
的合成内部,因此它必须为其指定布局数据:
Composite panel = new Composite(shell, SWT.BORDER);
panel.setLayout(new GridLayout(1, true));
final ChartComposite frame = new ChartComposite(panel, SWT.NONE, chart, true);
frame.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));