创建具有特定高度的空 table 并在 SWT 中单击按钮时重绘

Create empty table with specific height and redraw on button click in SWT

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

根据我在网上找到的内容,无法创建包含空行的 table。如果我想要空行,我需要添加一些我不想添加的虚拟数据(2-3 行的特定高度很好)。 还有其他方法吗?

我最好有一个 table 和 header + 3 行高度,以保持该高度并根据需要添加滚动条。我怎样才能做到这一点?


我的 table 布局是这样设置的:

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 中小部件的大小和位置由布局管理器控制。因此,您需要指示 table 的布局管理器为其指定所需的高度。

如果table的parent使用GridLayout,你可以使用hints来影响布局管理器的大小计算.

parent.setLayout( new GridLayout( 1, false ) );
...
Table table = new Table( parent, SWT.NONE );
GridData gridData = new GridData();
gridData.heightHint = table.getHeaderHeight() + ( 3 * table.getItemHeight() );
table.setLayoutData( gridData );

上面的示例告诉网格布局保留项目高度的 3 倍的高度,加上 header 行的空间,table。

请注意,getItemHeight() 可能会在您添加项目后发生变化,在这种情况下,您需要调整高度提示和 re-layout。

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

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);

我得到一个 table 完全填满 Group