Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT TableItem:如何删除左填充/缩进?_Java_Swt - Fatal编程技术网

Java SWT TableItem:如何删除左填充/缩进?

Java SWT TableItem:如何删除左填充/缩进?,java,swt,Java,Swt,下面的代码创建了一个包含两列两行的SWT表。在我的系统上,生成的shell/表如下所示: 我不禁想知道每个单元格文本前面的额外缩进/间距/填充是从哪里来的。我搜索过网络,并尝试了各种可能的方法来删除它,但我找不到一种方法如何删除额外的间距(上图中标记为红色)? 系统信息: public class SwtTableItemIssue { public static void main(String[] a) { Shell shell = new Shell(Display.get

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

我不禁想知道每个单元格文本前面的额外缩进/间距/填充是从哪里来的。我搜索过网络,并尝试了各种可能的方法来删除它,但我找不到一种方法如何删除额外的间距(上图中标记为红色)?

系统信息:

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();
  }
}
  • Linux Mint 17
  • SWT 4.4 x86_64
链接:

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();
  }
}
此示例最初是从bit中提取并修改的。原始站点上的屏幕截图未显示此间距/缩进

复制此问题的代码:

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();
  }
}

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

从版本4.4开始,SWT默认使用GTK3(如果可用)。我已经用GTK3和GTK2测试了您的代码,它在GTK3和GTK2中工作

您现在有三个选项:

  • 等待SWT团队修复它
  • 退回到较旧的SWT版本
  • 强制SWT(4.4)使用GTK2代替GTK3
  • 这两种解决方案都不理想,但我看不到其他选择


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

    export SWT_GTK3=0
    
    确保这是一个永久性设置,或者在每次启动应用程序之前都运行它


    是SWT 4.4的发行说明。

    相关/原始版本:在Mac OS X上显示正常。似乎为列图像留出了空间,这可能是Linux特有的问题。在Linux Mint上使用较旧版本的SWT可以正常工作。这里也不适用于SWT 4.4。
    TableItem
    的源代码中包含这样的注释:“在GTK的更高版本上,有点向右移动了-但是,old Tree也有这个问题。”。不确定是否与您的问题有关。如果是这样,他们似乎意识到了这个问题。太棒了,谢谢。我将使用SWT_GTK3 env变量作为解决方法,并将其作为SWT的bug报告;所以他们可能会在以后的版本中修复它。这里的Bug报告:/刚刚测试了SWT_GTK3=0,它也适用于该版本。SWT/GTK3表的实现似乎有点缺陷。