我使用swtchart(http://www.swtchart.org/)并尝试在对话框中显示它 但它总是失败。
SWT Dialog不支持swtchart,是吗?
public final class TestDialog extends
Dialog {
private Chart chart;
private static double[] ySeries1 = {1,2,3,4,5,6,7,8,9,0};
public TestDialog(Shell shell) {
super(shell);
}
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
createChart(composite);
return composite;
}
static public Chart createChart(Composite parent) {
// create a chart
Chart chart = new Chart(parent, SWT.NONE);
// set titles
chart.getTitle().setText("Large Series");
chart.getAxisSet().getXAxis(0).getTitle().setText("Data Points");
chart.getAxisSet().getYAxis(0).getTitle().setText("Amplitude");
// create line series
ILineSeries lineSeries = (ILineSeries) chart.getSeriesSet().createSeries(SeriesType.LINE,
"line series");
lineSeries.setYSeries(ySeries1);
lineSeries.setSymbolSize(2);
// adjust the axis range
chart.getAxisSet().adjustRange();
return chart;
}
}
答案 0 :(得分:2)
我不认为这个问题与SWTChart有关,而是与您对SWT布局的了解有关。
此外,图表没有理由不在SWT对话框中工作。
请相应地修改被覆盖的createDialogArea
:
@Override
protected void createDialogArea(final Composite parent)
{
final Composite dialogArea = (Composite) super.createDialogArea(parent);
final Composite container = new Composite(dialogArea, SWT.NULL);
container.setLayout(new GridLayout());
container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
createChart(container);
return dialogArea;
}
不要直接在dialogArea
下创建您的内容,而是创建一个中间容器。我碰巧知道dialogArea
有GridLayout
布局,因此我在容器上设置GridData
。
您可能需要read this article very carefully。
编辑1
显然,你的图表正在被绘制,但是对话框包装并且你会得到它没有画出的印象。尝试下面的代码,并调整对话框的大小以查看图表。
使对话框适合图表是一个完全不同的问题(关于SWT外壳和布局)。
/**
*
* @author ggrec
*
*/
public class ChartDialog extends Dialog
{
// ====================== 2. Instance Fields =============================
private static double[] ySeries1 = {1,2,3,4,5,6,7,8,9,0};
// ==================== 3. Static Methods ====================
public static void main(final String[] args)
{
final Display display = new Display();
new ChartDialog(new Shell(display)).open();
display.sleep();
display.dispose();
}
// ==================== 4. Constructors ====================
public ChartDialog(final Shell parent)
{
super(parent);
}
// ==================== 5. Creators ====================
@Override
protected Composite createDialogArea(final Composite parent)
{
final Composite dialogArea = (Composite) super.createDialogArea(parent);
final Composite container = new Composite(dialogArea, SWT.NULL);
container.setLayout(new FillLayout());
container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
createChart(container);
return dialogArea;
}
@Override
protected void setShellStyle(final int newShellStyle)
{
super.setShellStyle(newShellStyle | SWT.RESIZE);
}
static private Chart createChart(final Composite parent)
{
// create a chart
final Chart chart = new Chart(parent, SWT.NONE);
// set titles
chart.getTitle().setText("Large Series");
chart.getAxisSet().getXAxis(0).getTitle().setText("Data Points");
chart.getAxisSet().getYAxis(0).getTitle().setText("Amplitude");
// create line series
final ILineSeries lineSeries = (ILineSeries) chart.getSeriesSet().createSeries(SeriesType.LINE, "line series");
lineSeries.setYSeries(ySeries1);
lineSeries.setSymbolSize(2);
// adjust the axis range
chart.getAxisSet().adjustRange();
return chart;
}
}