繁体   English   中英

GWT CellTable / DataGrid-如何检测列选择?

[英]GWT CellTable/DataGrid - how to detect column selection?

当选择了一行时,我想知道选择了该行的哪一列。

目前,我会覆盖onBrowserEvent2

protected void onBrowserEvent2(Event event)
{
  // Get the event target.
  EventTarget eventTarget = event.getEventTarget();
  if (!Element.is(eventTarget)){
    return;
  }

  final Element target = event.getEventTarget().cast();

  // Find the cell where the event occurred.
  TableCellElement tableCell = findNearestParentCell(target);
  if (tableCell == null) {
    return;
  }

  int col = tableCell.getCellIndex();

  .... blah ... blah ....
}

哪里,

//exact replica code from {@link AbstractCellTable} private method findNearestParentCell
private TableCellElement findNearestParentCell(Element elem) {
  while ((elem != null) && (elem != getElement())) {
    // TODO: We need is() implementations in all Element subclasses.
    // This would allow us to use TableCellElement.is() -- much cleaner.
    String tagName = elem.getTagName();
    if ("td".equalsIgnoreCase(tagName) || "th".equalsIgnoreCase(tagName)) {
      return elem.cast();
    }
    elem = elem.getParentElement();
  }
  return null;
}

这是唯一的方法吗? 是否有一个带有更改事件的选择模型,该模型会告诉我单击了行的哪一列。

有没有一种方法可以在列或列的单元格上实现点击处理程序?

天哪...这是一个非常简单的解决方案。

对列使用ClickableTextCell的扩展名。

public class SelectableTextCell
extends ClickableTextCell
{
  @Override
  public void onBrowserEvent(
    Context context,
    Element parent,
    String value,
    NativeEvent event,
    ValueUpdater<String> valueUpdater)
  {
    GWT.log("event="+event.getType()); //$NON-NLS-1$
    doYourThing();
    if (IWishToPropagateTheClick)
      super.onBrowserEvent(context, parent, value, event, valueUpdater);
  }
}

或者,对于更一般的情况,扩展AbstractCell,并在构造函数中指定消耗的事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM