6
table.addSelectionListener(new SelectionAdapter() 
        {
            public void widgetSelected(SelectionEvent e) 
            {
                if(table.getSelectionIndex() != -1)
                {
                    System.out.println(table.getSelectionIndex());
                    TableItem item = table.getItem(table.getSelectionIndex());
                    System.out.println(item.toString());
                }
                else
                {}
            }
        });

当我单击表格中的任何单元格时,仅选择并返回该行的第一个单元格,而不是该单元格

请告诉我如何从我选择的那个单元格中选择和获取项目

请看图片 在此处输入图像描述

我选择了第三列,但它返回了第一列的 TableItem

4

2 回答 2

6

我之前也遇到过同样的问题,我是这样解决的:</p>

首先,您应该使表 SWT.FULL_SELECTION`;

然后,您必须通过读取鼠标位置来获取选定的单元格(因为基本的 swt 表不提供侦听器来获取选定的单元格;选择一个项目是可能的)。这是代码:

    table.addListener(SWT.MouseDown, new Listener(){
        public void handleEvent(Event event){
            Point pt = new Point(event.x, event.y);
            TableItem item = table.getItem(pt);
            if(item != null) {
                for (int col = 0; col < table.getColumnCount(); col++) {
                    Rectangle rect = item.getBounds(col);
                    if (rect.contains(pt)) {
                        System.out.println("item clicked.");
                        System.out.println("column is " + col);
                    }
                }
            }
        }
    });
于 2013-01-18T11:59:05.463 回答
0

我在使用 nebula 网格时遇到了类似的问题,发现您必须在表格对象上启用单元格选择。这是我的代码行:

tableViewer.getGrid().setCellSelectionEnabled(true);

也许您可以尝试用 getTable() 替换 getGrid()。您不需要为此实现选择侦听器。

于 2017-01-05T18:17:40.593 回答