この問題は 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;
}
}