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

时间:2018-04-06 07:30:48

标签: java swt redraw

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

从我在网上找到的内容来看,无法创建一个空行的表。如果我想要空行,我需要添加一些我不想要的虚拟数据(2-3行的特定高度是好的)。 还有其他办法吗?

最好我有一个标题+ 3行高度的表格,它保持这个高度并且必须添加滚动条。我怎样才能做到这一点?

我的表格布局设置如下:

--prod

注意: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

2 个答案:

答案 0 :(得分:1)

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

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

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倍,加上标题行的空间。

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

答案 1 :(得分:0)

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

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

我得到一张完全填满Group

的表格