我正在使用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.');
}
}
}
非常感谢任何帮助
感谢。
答案 0 :(得分: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;
}
}
使用此代码时,工具提示将非常靠近目标单元格。
答案 1 :(得分:2)
if (cellElement.getParentElement()
.getFirstChildElement().isOrHasChild(Element.as(event.getNativeEvent().getEventTarget()))
&& cellElement.getTagName().equalsIgnoreCase("span"))
这解决了这个问题 谢谢Andrei&amp;亚历克斯回复。
答案 2 :(得分:2)
谢谢大家,我也在寻找解决方案。
使用一杯茶的答案,我制作了一个通用类,可以重复使用以向任何单元格添加工具提示。它基于装饰模式。这是它可以帮助某人:
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";
}
};
答案 3 :(得分: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.');
}
}
}
答案 4 :(得分: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.');
}
}
}
安德烈(Andrei)的解决方案效果很好,但应该修复一个错误:
cellTable.getRowElement(event.getIndex() - cellTable.getPageStart()).getCells().getItem(event.getColumn()).setTitle('cell contents go here.');