Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 TreeItem图像缩进_Java_Eclipse_Swt - Fatal编程技术网

Java 删除SWT TreeItem图像缩进

Java 删除SWT TreeItem图像缩进,java,eclipse,swt,Java,Eclipse,Swt,我正在尝试构建一个SWT树,它在顶层有图标,但在下一层没有 有没有办法避免空白的空间,好像我没有用的图像?我尝试使用以下代码段,但都没有达到我的目的 SWT.MeasureItem: tree.addListener(SWT.MeasureItem, new Listener() { @Override public void handleEvent(Event event) { TreeItem item = (TreeItem)event.item; Image

我正在尝试构建一个SWT树,它在顶层有图标,但在下一层没有

有没有办法避免空白的空间,好像我没有用的图像?我尝试使用以下代码段,但都没有达到我的目的

SWT.MeasureItem:

tree.addListener(SWT.MeasureItem, new Listener()
{
  @Override
  public void handleEvent(Event event)
  {
    TreeItem item = (TreeItem)event.item;
    Image image = item.getImage();
    if (image == null)
    {
      event.x -= 40;
    }
  }
});
SWT.PaintItem:

tree.addListener(SWT.PaintItem, new Listener()
{
  @Override
  public void handleEvent(Event event) {
    TreeItem item = (TreeItem)event.item;
    Image image = item.getImage();
    if (image == null)
    {
      event.x -= 40;
    }
  }
});

在这两种情况下,我只是希望文本可以再向左画一点。

此行为来自本机控件,并且是特定于操作系统的(AFAIR,在Mac上,您不会看到此问题)。唉,除了添加一些通用图标(或者根本不添加图标),没有简单的解决办法。

我自己也做了一些调查。根据尤金的回答,这似乎是天生的行为。有几件事值得注意

如果树中没有任何项目具有图标,则不会为图标留出空间。但是,即使是带有图标的单个项目也会导致所有项目为图标留出空间

黑客解决方案可以实现如下:

  • 不使用图标,以便本机控件不留图标空间
  • 对于需要在文本前添加图标前缀的项目,例如“+”文本
  • 添加一个PaintItem侦听器,用于将所需图标绘制到文本留下的空间中
这可能不适合跨平台和跨系统字体,所以我决定使用图标