Java swtchart没有';不显示在对话框中

Java swtchart没有';不显示在对话框中,java,swt,swtchart,Java,Swt,Swtchart,我使用swtchart()并尝试在对话框中显示它 但它总是失败 SWT对话框不支持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(s

我使用swtchart()并尝试在对话框中显示它 但它总是失败

SWT对话框不支持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;
    }
}

我认为这个问题与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
有一个
GridLayout
布局,因此我在容器上设置了
GridData

你可能想


编辑1

很明显,你的图表正在绘制中,但是对话框打包后,你会得到它没有绘制的印象。尝试下面的代码,并调整对话框大小以查看图表

使对话框适合图表是一个完全不同的问题(关于SWT外壳和布局)


看不到你的代码就说不出来。请发布一个.Hi,这是示例代码感谢您的评论,但我按照您所说的进行了测试,但仍然不起作用。@user2159284添加了另一个示例,可以起作用。启动应用程序时,对话框很小,但您可以调整其大小。图表在那里。
/**
 * 
 * @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;
    }

}