我目前在我的Eclipse插件中实现了一个带有Table
的TableEditor
,以支持使用键盘支持的单元级编辑(使用编辑器遍历单元格)。
我还需要一种删除行的方法,我不想在表格旁边添加删除按钮的做法,因为它需要2次点击才能删除一行(1来选择行,1删除它)。相反,我想要一个单独的列,其中填充了删除图标。我想到了两种方法来实现这一点并且遇到了两个方面的问题:
向Table
添加其他列,使用TableItem.setImage()
设置图标。此方法存在多个问题,您可以在下面看到它们:< / p>
在表格旁边添加一个ScrolledComposite
,并用删除图标填充。这听起来有点疯狂,但实际上我已经用这个做了很多。我们的想法是使用删除图标填充ScrolledComposite
,强制它使用表格的滚动条滚动,并在单击图标时删除相应的行。我用这种方法遇到了一个阻塞问题:
所以我的问题是:
答案 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);
}
结果: