swtchart不会显示在对话框中

时间:2014-07-28 09:53:15

标签: java swt swtchart

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

1 个答案:

答案 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下创建您的内容,而是创建一个中间容器。我碰巧知道dialogAreaGridLayout布局,因此我在容器上设置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;
    }

}