将删除图标列添加到Eclipse表

时间:2012-02-03 05:13:16

标签: java eclipse sdk swt eclipse-plugin

我目前在我的Eclipse插件中实现了一个带有TableTableEditor,以支持使用键盘支持的单元级编辑(使用编辑器遍历单元格)。

我还需要一种删除行的方法,我不想在表格旁边添加删除按钮的做法,因为它需要2次点击才能删除一行(1来选择行,1删除它)。相反,我想要一个单独的列,其中填充了删除图标。我想到了两种方法来实现这一点并且遇到了两个方面的问题:

  1. Table添加其他列,使用TableItem.setImage()设置图标。此方法存在多个问题,您可以在下面看到它们:< / p>

    • 选择行时,图标也会被选中
    • 当鼠标悬停在图标上时,会显示图像的工具提示,显然无法禁用
    • 似乎无法将图像垂直居中在单元格内

    Delete column approach #1

  2. 在表格旁边添加一个ScrolledComposite,并用删除图标填充。这听起来有点疯狂,但实际上我已经用这个做了很多。我们的想法是使用删除图标填充ScrolledComposite,强制它使用表格的滚动条滚动,并在单击图标时删除相应的行。我用这种方法遇到了一个阻塞问题:

    • 似乎无法隐藏滚动条

    Delete column approach #2

  3. 所以我的问题是:

    • 如何解决上述任何一种方法中提到的问题?
    • 还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:3)

我找到了一种方法来隐藏第二种方法的滚动条。基本上你需要做的就是:

// ScrolledComposite sc;
sc.setAlwaysShowScrollBars(true);
sc.getVerticalBar().setVisible(false);

然后将ScrolledComposite的宽度设置为1,以消除不可见ScrollBar占用的额外空间。

并保持滚动条同步:

// Table table;
// ScrolledComposite sc;
// int tableRowHeight;

protected void createTable() {

  ...

  // Set the listener that dictates the table row height.
  table.addListener(SWT.MeasureItem, new Listener() {
    @Override
    public void handleEvent(Event event) {
      event.height = tableRowHeight;
    }
  });

  // Set the listener for keeping the scrollbars in sync.
  table.getVerticalBar().addSelectionListener(new SelectionAdapter() {
    @Override
    public void widgetSelected(SelectionEvent e) {
      syncDeleteColumnScrollBar();
    }
  });
}

// This is extracted out into a method so it can also be called
// when removing a table row.
protected void syncDeleteColumnScrollBar() {
  sc.setOrigin(0, table.getVerticalBar().getSelection() * tableRowHeight);
}

结果:

Delete column image