以下代码段创建了一个包含两列和两行的SWT表。在我的系统上,生成的shell /表如下所示:
我不禁想知道每个单元格文本前面的额外缩进/间距/填充来自何处。我搜索过网络并尝试了一切可能的方法将其删除,但我找不到办法。 如何删除多余的间距(上图中标记为红色)?
系统信息:
链接:
此示例最初取自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();
}
}
答案 0 :(得分:3)
好的,做了一些研究,结果发现它是一个GTK3问题。
从版本4.4开始,SWT默认使用GTK3(如果可用)。我用GTK3和GTK2测试了你的代码,它适用于后者。
您现在有三种选择:
这两种解决方案都不理想,但我没有看到其他选择。
您可以通过设置环境变量强制SWT使用GTK2:
export SWT_GTK3=0
确保将此设置为永久设置,或在每次启动应用程序之前运行它。
Here是SWT 4.4的发行说明。