我使用的是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.');
}
}
}
任何帮助深表感谢。
谢谢。
您可以扩展列类和重写方法呈现。 在渲染方法,你可以使用属性“称号”,这是用来设置工具提示文本。 简单的例子:
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靶细胞附近。
if (cellElement.getParentElement()
.getFirstChildElement().isOrHasChild(Element.as(event.getNativeEvent().getEventTarget()))
&& cellElement.getTagName().equalsIgnoreCase("span"))
这解决了问题。
感谢安德烈&亚历克斯答复。
谢谢大家,我一直在寻找一个解决这一点。
利用茶的回答一杯,我做了可重复使用,以提示添加到任何细胞泛型类。 它是基于一个装饰图案。 这是,如果它可以帮助别人:
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";
}
};
该解决方案的工作原理:
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.');
}
}
}
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.');