我有一个窗体,在窗体的一部分中,我在工具栏上有一个动作。 运行该操作应导致在具有动态列和行的表单中绘制swt表。SWT以表格的形式动态地绘制表格
问题是,我设法做到这一点的唯一方法是最初创建一个空表,然后将表句柄传递给稍后将填满它的动作。
如果我有操作代码来绘制表格,窗体不会展开(滚动)来显示整个表格。
有没有办法在不创建初始表的情况下实现我想要的?
我已经采用了复合的代码是这样的: 为了创建的形式构造的复合:
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);
当复合材料参数从传递行动代码中的表单。该表似乎被分配和复合空间,但没有显示。
我试过这种方法我创建了一个复合的形式: tableComposite = new Composite(parentComposite,SWT.None); 和我把tableComposite传递给动作。 动作代码是这样的: this.viewer = new TableViewer(composite,SWT.BORDER | SWT.FULL_SELECTION); this.viewer.setContentProvider(new FeatureContentProvider()); \t \t this.viewer.setLabelProvider(new FeatureLabelProvider()); \t \t this.viewer.getTable()。setLayoutData(gd); \t \t this.viewer.getTable()。setHeaderVisible(true); \t \t this.viewer.getTable()。redraw(); \t \t this.viewer.refresh(); thic.composite.layout(true,true) 但是仍然没有显示... – user847988
请在您的问题中发布代码,它会更具可读性。另外,我想你忘了把布局设置为'tableComposite' – Baldrick
好了,我编辑了这个问题。 – user847988