【问题标题】:How to avoid SWT table enlargement correctly?如何正确避免 SWT 表放大?
【发布时间】:2016-08-13 03:01:03
【问题描述】:

我有一个像这样的简单 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();
}

我的期望 - 我希望表格完全填满贝壳空间而不改变它的大小。 (截图 1 和 3)

问题 - 如果我在表格中添加行,表格会自动调整大小(外壳也是如此)。 (截图二)

解决方法 - 为了避免这种行为,我在代码中添加了 gridData.heightHint = 0; 行。但这对我来说似乎是一个黑客行为。

问题 - 添加数据时避免表格(和外壳)扩大的正确方法是什么?

问候,winklerrr

截图 1

在两个版本中,如果没有数据,表格和外壳都不会调整大小,行为正确

截图 2

随着数据,表格和外壳越来越大,错误的行为,只有没有破解

截图 3

使用数据,表格和外壳不会调整大小,添加滚动条,正确的行为,只有 hack

【问题讨论】:

  • 你能发一个MCVE来说明你的问题吗?
  • @Baz 你错过了什么?
  • 当我尝试时它在这里工作正常,但正如第一个答案所说,你打电话给shell.setSize()了吗?如果您发布 MCVE,我们就会知道。
  • 我会说 heightHint 没问题。您可以指定一个正数来强制表格为固定大小。
  • @Baz 我更新了帖子,希望现在更好

标签: java layout swt


【解决方案1】:

在向表中添加数据之前的某个时间点调用shell.setSize(int width, int height)

【讨论】:

  • 如果我在shell.pack() 之后添加这个调用(或者甚至用这个调用替换shell.pack()),它就可以工作。在向表中添加数据之前调用它不会改变任何内容。
【解决方案2】:

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

为了实现这一点,我像这样以像素为单位计算预期的初始高度,并将其用作高度提示。

gridData.heightHint = table.getItemHeight() * 20;

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

【讨论】:

    【解决方案3】:
    shell.setSize(int width, int height)
    

    将此代码添加到表中的数据之后。

    【讨论】:

    • 如果我在shell.pack() 之前添加这个,没有任何改变。看来,我需要在 shell.pack() 之后添加它,甚至用它替换它。
    猜你喜欢
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2021-01-25
    相关资源
    最近更新 更多