Отмените выбор элемента TableItem после нажатия на пустое место в таблице. - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть таблица со многими TableItems (не tableViewer), когда я нажимаю на один из элементов таблицы, он выбирается. Единственный способ отменить это, выбрав другой TableItem. Я хочу реализовать способ отменить выбор Выбор таблицы, когда пользователь нажимает на таблицу, где нет TableItems, или при повторном выборе того же 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;

тоже не сработало.

1 Ответ

0 голосов
/ 06 сентября 2018

События выбора не генерируются для пустых частей таблицы, поэтому вы не можете использовать слушатель выбора для этого.

Вы можете использовать слушатель мыши вниз и проверить, есть ли элемент таблицы в местоположении мыши:

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;
      }
    }
  });
...