如何正确避免SWT表放大?

时间:2016-04-20 12:23:02

标签: java layout swt

我有一个简单的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

截屏1

没有数据,表和shell在两个版本中都没有调整大小,正确的行为 Empty table (correct)

截屏2

随着数据,表格和外壳变得越来越大,行为错误,只有没有黑客
Full table (wrong)

截屏3

对于数据,表和shell不会调整大小,添加滚动条,正确行为,只有与黑客
Full table (correct)

3 个答案:

答案 0 :(得分:3)

在将数据添加到表格之前的某个时刻调用shell.setSize(int width, int height)

答案 1 :(得分:3)

您通常希望表格具有某个逻辑高度,例如20行。至少这是我经常选择的方法。

为实现这一目标,我计算出像这样的预期初始高度,并将其用作高度提示。

MethodHandle

为了更准确,您还需要添加表格的修剪。

答案 2 :(得分:1)

shell.setSize(int width, int height)

将数据添加到您的表后。