События выбора не генерируются для пустых частей таблицы, поэтому вы не можете использовать слушатель выбора для этого.
Вы можете использовать слушатель мыши вниз и проверить, есть ли элемент таблицы в местоположении мыши:
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;
}
}
});