单击表中的空插槽后取消选择TableItem

问题描述 投票:0回答:1

我有一个包含许多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;

也没用。

java eclipse user-interface swt
1个回答
1
投票

不为表的空部分生成选择事件,因此您无法使用选择侦听器来执行此操作。

您可以使用鼠标按下侦听器并检查鼠标位置是否有表项:

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;
      }
    }
  });
© www.soinside.com 2019 - 2024. All rights reserved.