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があることがわかったので、コンテナに を設定しました。GridLayoutGridData

この記事を注意深く読むことをお勧めします。


編集 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 に答える