我有一个表单,在表单的一部分中,我对工具栏有一个操作。
运行该操作将导致以动态列和行的形式绘制一张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是从操作代码中的表单传递的参数。该表似乎已分配,并且组合的空间也已分配,但未显示。

最佳答案

我会这样做:


在要添加表格的位置(占位符)的位置创建表单时,创建一个空的Composite。在添加表之前,它是不可见的。
当您需要创建表时,请处置占位符组合的所有子级(例如,删除以前的表)
使用占位符组合作为父级来创建Table
创建列并填写表格
在表单(或顶级Composite)上调用layout(true, true)以显示该表。


编辑

从我对您的代码的了解来看,您至少需要为tableComposite设置布局:

tableComposite.setLayout(GridLayoutFactory.fillDefaults().create());


重新布局应该在较高级别进行(也许使用getParent()一次或几次,直到达到最高级别的复合,但最好将其作为字段使用)。例:

this.composite.getParent().layout(true, true);

关于java - SWT以表格形式动态绘制表格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13357736/

10-11 22:28
查看更多