2017-04-07 64 views
0

我有两个SWT表包装在一个Group,它有一个ScrolledComposite防止浏览器滚动条(而不是滚动表)。两个SWT表战斗抢占空间

table_sizing_toolInfo = new Table(grpCapacityReport, SWT.BORDER); 
table_sizing_toolInfo.setData(RWT.FIXED_COLUMNS, Integer.valueOf(6)); 
table_sizing_toolInfo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 

这两个表格都有GridData,它抓住了多余的垂直空间。

当不使用数据进行渲染时,表格按预期工作(两者都占用过多,因此它们会拆分视图空间)。 一旦数据填充到表格中,它将按预期方式显示,直到切换选项卡(强制重绘)为止,它仍会仍然显示。

table_sizing_dgrInfo.setRedraw(false); 
table_sizing_toolInfo.setRedraw(false); 
table_sizing_dgrInfo.removeAll(); 
table_sizing_toolInfo.removeAll(); 
while (table_sizing_dgrInfo.getColumnCount() > 6) { 
    table_sizing_dgrInfo.getColumns()[6].dispose(); 
} 
while (table_sizing_toolInfo.getColumnCount() > 6) { 
    table_sizing_toolInfo.getColumns()[6].dispose(); 
} 
renderSizingTableDynamic(scenarioMap.get(combo_sizing_ScenarioID.getText())); 
table_sizing_toolInfo.setRedraw(true); 
table_sizing_dgrInfo.setRedraw(true); 

底部表保存比上表中更多的数据,更多的行添加表格底部吞噬的顶级表的空间,直到它只是一个单一的pixle高。

回答

1

ScrolledComposite不太可能满足您的需求。如果你想两个表采取同样的高度,那么你应该使用一个Rowlayout这样的:

parent.setLayout(new RowLayout(SWT.VERTICAL)); 
Table topTable = new Table(parent, ...); 
Table bottomTable = new Table(parent, ...); 

你也可以使用一个SashForm作为两个表的父。因此,让用户拖动分离表格的窗框并确定每个表格应该占用多少高度。

有关更多信息,文章Understanding SWT Layouts提供了有关SWT标准布局的深入讨论。您可以放心地忽视弃用警告,这里讨论的概念仍然有效。

+0

我不希望两个表具有相同的高度。顶部桌子应该适合内容,底部桌子应该抓住多余的垂直空间。 在这种情况下扩展网格布局与'dgrInfoGD.minimumHeight = SWT.DEFAULT;' 工作这里的问题是,多余的变量空间是有条件的浏览器窗口空间(我没有动态调整大小监听器布局...然而)。 考虑到这种情况,即使对于我的使用来说,窗口空间应该总是有足够的空间来存放两个表,'SashForm'对于UX来说是最一致的。 – Elysiumplain