创建具有特定高度的空 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
我想创建一个包含 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