-->

GWT CellTable提示无法正常工作(GWT CellTable tooltip not wo

2019-09-23 23:03发布

我使用的是CellTable,我想显示一个提示,每当我将鼠标悬停在任何细胞。 我的代码工作正常,但提示不改变其立场。

我的意思是说, 如果我将鼠标悬停在小区1工具提示显示,然后,如果我将鼠标悬停在单元100的提示数据的变化,但提示仍显示在单元1。

我使用下面的代码:

cellTable.addCellPreviewHandler(new Handler<List<String>>() {
  @Override
  public void onCellPreview(CellPreviewEvent<List<String>> event) {
    if ("mouseover".equals(event.getNativeEvent().getType())) {
      Element cellElement = event.getNativeEvent().getEventTarget().cast();

      cellElement.setTitle('cell contents go here.');
    }
  }
}



任何帮助深表感谢。
谢谢。

Answer 1:

您可以扩展列类和重写方法呈现。 在渲染方法,你可以使用属性“称号”,这是用来设置工具提示文本。 简单的例子:

SampleColumn<T> extends TextColumn<T> {

  @Override
  public void render(Context context, T object, SafeHtmlBuilder sb) {
    sb.appendHtmlConstant("<div title=\"" + getTitle(object) + "\">");
    sb.appendEscaped(getValue(object));
    sb.appendHtmlConstant("</div>");
  }

  @Override
  public String getValue(T object) {
    return displayedValue;
  }

  public String getTitle(T object) {
    return yourTooltipText;
  }
}

使用此代码时,工具提示将是exacly靶细胞附近。



Answer 2:

if (cellElement.getParentElement()
              .getFirstChildElement().isOrHasChild(Element.as(event.getNativeEvent().getEventTarget()))
              && cellElement.getTagName().equalsIgnoreCase("span"))

这解决了问题。
感谢安德烈&亚历克斯答复。



Answer 3:

谢谢大家,我一直在寻找一个解决这一点。

利用茶的回答一杯,我做了可重复使用,以提示添加到任何细胞泛型类。 它是基于一个装饰图案。 这是,如果它可以帮助别人:

public class TooltipCell extends AbstractSafeHtmlCell<String>
{
    AbstractCell<String> cell;
    private String tooltip;

    public TooltipCell(AbstractCell<String> cell, String tooltip)
    {
        super(SimpleSafeHtmlRenderer.getInstance(), BrowserEvents.CLICK, BrowserEvents.KEYDOWN);
        this.cell = cell;
        this.tooltip = tooltip;
    }

    @Override
    protected void render(com.google.gwt.cell.client.Cell.Context context, SafeHtml data, SafeHtmlBuilder sb)
    {
        sb.appendHtmlConstant("<div title=\"" + tooltip + "\">");
        cell.render(context, data.asString(), sb);
        sb.appendHtmlConstant("</div>");
    }

    @Override
    public void onBrowserEvent(com.google.gwt.cell.client.Cell.Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater)
    {
        cell.onBrowserEvent(context, parent, value, event, valueUpdater);
    }
}

然后,它可以用作如下:

myColumn = new Column<MyObject, String>(new TooltipCell(new ButtonCell(), "tooltip text"))
    {
        @Override
        public String getValue(CurrencyDTO object)
        {
            return "button text";
        }
    };


Answer 4:

该解决方案的工作原理:

cellTable.addCellPreviewHandler(new Handler<List<String>>() {
  @Override
  public void onCellPreview(CellPreviewEvent<List<String>> event) {
    if ("mouseover".equals(event.getNativeEvent().getType())) {
      cellTable.getRowElement(event.getIndex()).getCells().getItem(event.getColumn()).setTitle('cell contents go here.');
    }
  }
}


Answer 5:

cellTable.addCellPreviewHandler(new Handler<List<String>>() {
  @Override
  public void onCellPreview(CellPreviewEvent<List<String>> event) {
    if ("mouseover".equals(event.getNativeEvent().getType())) {
      cellTable.getRowElement(event.getIndex()).getCells().getItem(event.getColumn()).setTitle('cell contents go here.');
    }
  }
}

安德烈的解决方案的工作不错,但有一个bug应该是固定的:

cellTable.getRowElement(event.getIndex() - cellTable.getPageStart()).getCells().getItem(event.getColumn()).setTitle('cell contents go here.');


文章来源: GWT CellTable tooltip not working properly