0

我使用 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;
    }
}
4

1 回答 1

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在容器上设置了。

您可能需要非常仔细地阅读这篇文章


编辑 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;
    }

}
于 2014-07-28T10:18:02.390 回答