我有一个简单的SWT程序:
public static void main(String[] args) {
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new GridLayout(1, false));
shell.setMinimumSize(300, 300);
// table
final Table table = new Table(shell, SWT.BORDER);
final GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
gridData.heightHint = 0; // "hack"
table.setLayoutData(gridData);
// example data
for (int i = 0; i < 50; i++) {
final TableItem item = new TableItem(table, SWT.NONE);
item.setText("item no." + i);
}
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
我的期望 - 我希望表格完全填写shell空间而不改变它的大小。 (截图1和3)
问题 - 如果我向表中添加行,表会自动调整大小(shell也是如此)。 (截图2)
解决方法 - 为避免此行为,我在代码中添加了行gridData.heightHint = 0;
。但这对我来说似乎是个黑客。
问题 - 在添加数据时,避免扩大表(和shell)的正确方法是什么?
问候,winklerrr
没有数据,表和shell在两个版本中都没有调整大小,正确的行为
答案 0 :(得分:3)
在将数据添加到表格之前的某个时刻调用shell.setSize(int width, int height)
?
答案 1 :(得分:3)
您通常希望表格具有某个逻辑高度,例如20行。至少这是我经常选择的方法。
为实现这一目标,我计算出像这样的预期初始高度,并将其用作高度提示。
MethodHandle
为了更准确,您还需要添加表格的修剪。
答案 2 :(得分:1)
shell.setSize(int width, int height)
将数据添加到您的表后。