我有一个包含许多TableItems(不是tableViewer)的表,当我点击其中一个表项时它被选中。取消选择它的唯一方法是选择另一个TableItem。我想实现一种方法来取消选择表选择当用户单击表没有TableItem时,或重新选择相同的TableItem时。
table.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if(e.item != ItemSelectioner ) {
ItemSelectioner = (TableItem)e.item;
// Blabla
}else {
ItemSelectioner = null;
table.deselectAll();
//blabla
}
}
});
正如你所看到的,我正在使用一个我认为是问题的selectionEvent,并使用:
e.doit = false;
也没用。
不为表的空部分生成选择事件,因此您无法使用选择侦听器来执行此操作。
您可以使用鼠标按下侦听器并检查鼠标位置是否有表项:
table.addListener(SWT.MouseDown, event -> {
TableItem item = table.getItem(new Point(event.x, event.y));
if (item == null) { // No table item at the click location?
table.deselectAll();
}
});
要在第二次单击项目时清除选择,请使用以下内容:
table.addListener(SWT.Selection, new Listener()
{
private int lastSelected = -1;
@Override
public void handleEvent(final Event event)
{
final int selectedIndex = table.getSelectionIndex();
if (selectedIndex < 0) {
lastSelected = -1;
return;
}
if (selectedIndex == lastSelected) {
table.deselect(selectedIndex);
lastSelected = -1;
}
else {
lastSelected = selectedIndex;
}
}
});