3

私は 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.');
    }
  }
}



どんな助けでも大歓迎です。
ありがとう。

4

5 に答える 5

3

Column クラスを拡張し、メソッド render をオーバーライドできます。render メソッドでは、ツール ヒントのテキストを設定するために使用されるプロパティ "title" を使用できます。簡単な例:

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;
  }
}

このコードを使用すると、ツールチップがターゲット セルのすぐ近くに表示されます。

于 2012-10-11T07:40:53.203 に答える
2
if (cellElement.getParentElement()
              .getFirstChildElement().isOrHasChild(Element.as(event.getNativeEvent().getEventTarget()))
              && cellElement.getTagName().equalsIgnoreCase("span"))

これで問題は解決します。
Andrei と Alex の返信に感謝します。

于 2012-10-22T03:11:36.470 に答える
2

ありがとう、私もそれに対する解決策を探していました。

A cup of tea's answer を使用して、任意のセルにツールチップを追加するために再利用できるジェネリック クラスを作成しました。これは、デコレータ パターンに基づいています。それが誰かを助けることができるかどうかはここにあります:

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";
        }
    };
于 2013-11-24T11:38:57.887 に答える
0

このソリューションは機能します:

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.');
    }
  }
}
于 2012-10-11T14:23:30.977 に答える