0

我想在 GWT 中向 FlexTable 添加双击处理程序。

我使用了以下代码:

 flexTable.addDoubleClickHandler(new DoubleClickHandler() {

                @Override
                public void onDoubleClick(DoubleClickEvent event) {

                }
    });

但是我怎样才能获得行索引。

请给我建议。

4

1 回答 1

5

遗憾的是,没有内置方法可以从 FlexTable 中的双击事件中检索单元格。不过,它可以用几行代码来实现。我就是这样做的。

使用以下代码创建 FlexTable 的子类:

public class DoubleClickTable extends FlexTable {
    class MyCell extends Cell {
        protected MyCell(int rowIndex, int cellIndex) {
            super(rowIndex, cellIndex);
        }
    }

    public Cell getCellForEvent(MouseEvent<? extends EventHandler> event) {
        Element td = getEventTargetCell(Event.as(event.getNativeEvent()));
        if (td == null) {
          return null;
        }

        int row = TableRowElement.as(td.getParentElement()).getSectionRowIndex();
        int column = TableCellElement.as(td).getCellIndex();
        return new MyCell(row, column);
    }
}

然后在 DoubleClickHandler 中调用 getCellForEvent() 来检索点击的单元格:

flexTable.addDoubleClickHandler(new DoubleClickHandler() {
    @Override
    public void onDoubleClick(DoubleClickEvent event) {
        Cell cell = flexTable.getCellForEvent(event);
        GWT.log("Row index: " + cell.getRowIndex());
    }
});

实现细节:getCellForEvent()方法是HTMLTable类(FlexTable的父类)中同名方法的一个副本,只是参数的签名不同。MyCell 类是一种能够调用受保护的 Cell 构造函数的解决方法。

于 2012-10-07T14:05:03.527 回答