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 に答える