【问题标题】:SWT TableItem: How to remove left padding/ indent?SWT TableItem:如何删除左填充/缩进?
【发布时间】:2015-01-11 00:42:25
【问题描述】:

以下代码创建了一个包含两列和两行的 SWT 表。在我的系统上,生成的 shell/table 如下所示:

我不禁想知道每个单元格文本前面的额外缩进/间距/填充来自哪里。我已经在网上搜索并尝试了所有可能的方法来删除它,但我找不到方法。 如何去除多余的间距(上图中标记为红色)?

系统信息:

  • Linux Mint 17
  • SWT 4.4 x86_64

链接:

这个例子最初取自java2s.com,稍作修改。原始网站上的屏幕截图没有显示此间距/缩进。

重现此问题的代码:

public class SwtTableItemIssue {
  public static void main(String[] a) {
    Shell shell = new Shell(Display.getDefault());
    shell.setSize(200, 180);
    shell.setLayout(new FillLayout());

    Table t = new Table(shell, SWT.BORDER);
    t.setHeaderVisible(true);

    TableColumn tc1 = new TableColumn(t, SWT.NONE);
    TableColumn tc2 = new TableColumn(t, SWT.NONE);
    tc1.setText("First Name");
    tc2.setText("Last Name");
    tc1.setWidth(70);
    tc2.setWidth(70);

    new TableItem(t, SWT.NONE).setText(new String[] { "Tim", "Hatton" });
    new TableItem(t, SWT.NONE).setText(new String[] { "Caitlyn", "Warner" });

    shell.open();
    shell.layout();

    Display display = Display.getDefault();

    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }

    display.dispose();
  }
}

【问题讨论】:

  • 在 Mac OS X 上显示正常。看起来为列图像留出了空间,可能是 Linux 特定的问题。
  • 在具有旧版本 SWT 的 Linux Mint 上运行良好。也不适用于 SWT 4.4。
  • TableItem 的源代码包含这样的注释:“在 GTK 的更高版本上移动有点太远了 - 然而,老树也有这个问题”。不确定它是否与您的问题有关。如果是这样,他们似乎意识到了这个问题。

标签: java swt


【解决方案1】:

好的,做了一些研究,发现这是一个 GTK3 问题。

从 4.4 版开始,SWT 默认使用 GTK3(如果可用)。我已经使用 GTK3 和 GTK2 测试了您的代码,并且在后者中可以正常工作。

您现在有三个选项:

  1. 等待 SWT 团队修复它。
  2. 回退到旧的 SWT 版本。
  3. 强制 SWT (4.4) 使用 GTK2 而不是 GTK3。

这两种解决方案都不理想,但我没有看到其他选择。


您可以通过设置环境变量来强制 SWT 使用 GTK2:

export SWT_GTK3=0

确保在每次启动应用程序之前将其设为永久设置或运行它。

Here 是 SWT 4.4 的发行说明。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-04-16
  • 2021-06-09
  • 2016-05-30
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多