フォームのセクションにツールバーのアクションがあるフォームがあります。アクションを実行すると、動的な列と行を含むフォームに swt テーブルが描画されます。
問題は、私がこれを行う唯一の方法は、最初に空のテーブルを作成し、後でテーブル ハンドルをアクションに渡すことです。
テーブルを描画するアクション コードがある場合、フォームはテーブル全体を表示するために展開 (スクロール) しません。
初期テーブルを作成せずに私が望むものを達成する方法はありますか?
Composite を使用しているコードは次のようなものです: フォーム構築でコンポジットを作成する場合:
gd = new GridData();
gd.widthHint = 400;
gd.heightHint = 200;
tableComposite = new Composite(this.client, SWT.None);
tableComposite.setLayoutData(gd);
アクション コード内:
GridData gd = new GridData();
gd.widthHint = 400;
gd.heightHint = 200;
if (this.viewer != null) {
this.viewer.getTable().setRedraw(false);
while (this.viewer.getTable().getColumnCount() > 0) {
this.viewer.getTable().getColumns()[0].dispose();
}
this.viewer.getTable().dispose();
this.viewer = null;
}
this.viewer = new TableViewer(composite, SWT.BORDER
| SWT.FULL_SELECTION);
this.viewer.setContentProvider(new FeatureContentProvider());
this.viewer.setLabelProvider(new FeatureLabelProvider());
this.viewer.getTable().setLayoutData(gd);
this.viewer.getTable().setHeaderVisible(true);
this.viewer.getTable().redraw();
this.viewer.refresh();
List<String> columnNames = getColumnNamesForTable();
for (String name : columnNames) {
TableColumn c = new TableColumn(this.viewer.getTable(), SWT.NONE);
c.setText(name);
c.setWidth(100);
}
this.viewer.getTable().redraw();
this.viewer.refresh();
this.viewer.setInput(iterations);
this.composite.layout(true, true);
ここで、composite は、アクション コードのフォームから渡されるパラメーターです。テーブルが割り当てられているようで、コンポジット用のスペースもありますが、表示されていません。