Java SWT在表单中动态绘制表
我有一个窗体,在窗体的某个部分,工具栏上有一个操作。 运行该操作将导致以动态列和行的形式绘制swt表 问题是,我能够做到这一点的唯一方法是首先创建一个空表,然后将表句柄传递给操作,该操作稍后将填充它 如果我有绘制表格的操作代码,表单不会展开(滚动)以显示整个表格 是否有任何方法可以在不创建初始表的情况下实现我想要的 我使用组合的代码如下所示: 要在窗体构造中创建组合,请执行以下操作:Java SWT在表单中动态绘制表,java,eclipse,swt,dynamically-generated,Java,Eclipse,Swt,Dynamically Generated,我有一个窗体,在窗体的某个部分,工具栏上有一个操作。 运行该操作将导致以动态列和行的形式绘制swt表 问题是,我能够做到这一点的唯一方法是首先创建一个空表,然后将表句柄传递给操作,该操作稍后将填充它 如果我有绘制表格的操作代码,表单不会展开(滚动)以显示整个表格 是否有任何方法可以在不创建初始表的情况下实现我想要的 我使用组合的代码如下所示: 要在窗体构造中创建组合,请执行以下操作: gd = new GridData(); gd.widthHint = 400; gd.
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);
GridData gd=new GridData();
gd.1=400;
gd.heightHint=200;
如果(this.viewer!=null){
this.viewer.getTable().setRedraw(false);
而(this.viewer.getTable().getColumnCount()>0){
this.viewer.getTable().getColumns()[0].dispose();
}
this.viewer.getTable().dispose();
this.viewer=null;
}
this.viewer=新的TableViewer(复合,SWT.BORDER
|SWT.全方位选择);
this.viewer.setContentProvider(新特性ContentProvider());
this.viewer.setLabelProvider(新特性LabelProvider());
this.viewer.getTable().setLayoutData(gd);
this.viewer.getTable().setheadervible(true);
this.viewer.getTable().redraw();
this.viewer.refresh();
List columnNames=getColumnNamesForTable();
for(字符串名称:columnNames){
TableColumn c=新的TableColumn(this.viewer.getTable(),SWT.NONE);
c、 setText(姓名);
c、 设定宽度(100);
}
this.viewer.getTable().redraw();
this.viewer.refresh();
this.viewer.setInput(迭代);
这个.composite.layout(true,true);
其中composite是从动作代码中的表单传递的参数。表似乎已分配,组合的空间也已分配,但没有显示。我会这样做:
- 在创建表单时,在要添加表格的位置(占位符)创建一个空的
组合
。在添加表之前,它将不可见
- 需要创建表时,请处理占位符组合的所有子项(例如,删除以前的表)
- 使用占位符组合作为父项创建
表
- 创建列并填充表
- 在表单(或顶级组合)上调用
,以显示表格layout(true,true)
表格组合
:
tableComposite.setLayout(GridLayoutFactory.fillDefaults().create());
并且应该在更高的级别上进行重新调整(可能使用getParent()
一次或多次,直到达到顶级组合,但如果将其作为字段,则效果会更好)。例如:
this.composite.getParent().layout(true, true);
我会这样做:
- 在创建表单时,在要添加表格的位置(占位符)创建一个空的
组合
。在添加表之前,它将不可见
- 需要创建表时,请处理占位符组合的所有子项(例如,删除以前的表)
- 使用占位符组合作为父项创建
表
- 创建列并填充表
- 在表单(或顶级组合)上调用
,以显示表格layout(true,true)
表格组合
:
tableComposite.setLayout(GridLayoutFactory.fillDefaults().create());
并且应该在更高的级别上进行重新调整(可能使用getParent()
一次或多次,直到达到顶级组合,但如果将其作为字段,则效果会更好)。例如:
this.composite.getParent().layout(true, true);
上述代码中缺少的是
组合
的重画
:
this.composite.redraw();
上述代码中缺少的是
组合
的重画
:
this.composite.redraw();
更好的解决办法应该是: 1) 在表单创建过程中添加空表
2) 通过将表的
GridData
的Exclude
属性设置为true,将表从UI中排除3) 需要时,将列和行添加到表中
4) 将
exclude
属性设置为false
5) 重新绘制或布局表的容器。更好的解决方案应该是: 1) 在表单创建过程中添加空表
2) 通过将表的
GridData
的Exclude
属性设置为true,将表从UI中排除3) 需要时,将列和行添加到表中
4) 将
exclude
属性设置为false
5) 重新绘制或
layout
table的容器。我尝试了这种方法,我创建了一个组合,形式为:tableComposite=newcomposite(parentComposite,SWT.None);然后我将tableComposite传递给action。操作代码如下:this.viewer=newtableviewer(composite,SWT.BORDER | SWT.FULL_SELECTION);this.viewer.setContentProvider(新特性ContentProvider());this.viewer.setLabelProvider(新特性LabelProvider());this.viewer.getTable().setLayoutData(gd);this.viewer.getTable().setheadervible(true);this.viewer.getTable().redraw();this.viewer.refresh();thic.composite.layout(true,true),但仍然没有显示…请在您的问题中发布代码,它将更具可读性。另外,我想你忘了将布局设置为tableComposite
我尝试了你的建议,但仍然没有显示该表。。。我真的不明白为什么…@user847988对不起,不知道了。在这些情况下,我通常会在合成图中添加边框、边距和背景色,以帮助找出缺少的内容。请在需要时发布解决方案