残念ながら、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コンストラクターを呼び出せるようにするための回避策です。