Java 创建具有特定高度的空表,并在SWT中单击按钮重新绘制

Java 创建具有特定高度的空表,并在SWT中单击按钮重新绘制,java,swt,redraw,Java,Swt,Redraw,我想创建一个包含2-3个空行的空SWT表。我还想在点击按钮时用数据填充这个表 根据我在web上的发现,不可能创建包含空行的表。如果我想要空行,我需要添加一些虚拟数据,我不想将其设置为2-3行的特定高度。还有别的办法吗 最好我会有一个标题+3行高度的表,它可以保持这个高度,并根据需要添加滚动条。我怎样才能做到这一点 我的表格布局设置如下: Group tableGroup = new Group(parent, SWT.SHADOW_OUT); GridLayout gridLayout = ne

我想创建一个包含2-3个空行的空SWT表。我还想在点击按钮时用数据填充这个表

根据我在web上的发现,不可能创建包含空行的表。如果我想要空行,我需要添加一些虚拟数据,我不想将其设置为2-3行的特定高度。还有别的办法吗

最好我会有一个标题+3行高度的表,它可以保持这个高度,并根据需要添加滚动条。我怎样才能做到这一点

我的表格布局设置如下:

Group tableGroup = new Group(parent, SWT.SHADOW_OUT);
GridLayout gridLayout = new GridLayout(1, false);
gridLayout.marginWidth = 5;
gridLayout.marginHeight = 5;
tableGroup.setLayout(gridLayout);
tableGroup.setText("Test");

Composite tableComp = new Composite(tableGroup, SWT.NONE);

TableViewerBuilder tableViewerBuilder = new TableViewerBuilder(tableComp, SWT.BORDER | SWT.NO_SCROLL | SWT.V_SCROLL);

tableViewer = tableViewerBuilder.getTableViewer();

GridData gridData = new GridData();
gridData.heightHint = tableViewer.getTable().getHeaderHeight()
        + (5 * tableViewer.getTable().getItemHeight());

tableGroup.setLayoutData(gridData);

注意:TableViewerBuilder只创建一个新的TableViewer并将TableColumnLayout设置为table。getParent

SWT中小部件的大小和位置由布局管理器控制。因此,您需要指示表格的布局管理器为其指定所需的高度

如果表的父级使用GridLayout,则可以使用提示来影响布局管理器的大小计算

parent.setLayout新建GridLayout 1,false; ... Table Table=新表父级,SWT.NONE; GridData GridData=新的GridData; gridData.heightHint=table.getHeaderHeight+3*table.getItemHeight; table.setLayoutData gridData; 上面的示例告诉网格布局为表保留3倍于项高度的高度,以及标题行的空间


请注意,添加项目后,getItemHeight可能会更改,在这种情况下,您需要调整高度提示并重新布局。

接受的答案确实对我获得结果有很大帮助。但在这里,我提供了对我有效的最终解决方案:

Group tableGroup = new Group(parent, SWT.SHADOW_OUT);
FillLayout fillLayout = new FillLayout(SWT.VERTICAL);
fillLayout.marginWidth = 5;
fillLayout.marginHeight = 5;
tableGroup.setLayout(fillLayout);

data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);

tableGroup.setText("Test");

Composite tableComp = new Composite(tableGroup, SWT.NONE);

TableViewerBuilder tableViewerBuilder = new TableViewerBuilder(tableComp,
        SWT.BORDER | SWT.NO_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);

tableViewer = tableViewerBuilder.getTableViewer();
tableViewer.setContentProvider(OpenFigiResponseContentProvider.getInstance());

data.heightHint = tableViewer.getTable().getHeaderHeight()
        + (5 * tableViewer.getTable().getItemHeight());
tableGroup.setLayoutData(data);
tableViewer.getTable().setLayoutData(data);

我得到了一个完全填充组的表

我可以使用您的代码来扩展组的大小,但是该表不会占用多余的空间。如果希望表使用多余的空间,您可能需要使用新的GridData SWT.fill,SWT.fill,true,true来创建GridData。有关SWT布局的一般介绍,请参见此处: