如何向 GWT CellTable 中的 ButtonCells 添加工具提示?
How to add tooltips to ButtonCells in a GWT CellTable?
我在 GWT 中有一个 CellTable,其中最后一列是 ButtonCell。我想根据所用对象的属性向按钮添加工具提示。问题是每个对象都有不同的属性值,但 GWT 为所有按钮显示相同的工具提示文本(取自 table 的最后一行)。有什么建议吗?
final ButtonCellDefinitionExtended<MyObject> def = new ButtonCellDefinitionExtended<MyObject>() {
@Override
public boolean isVisible(MyObject bean) {
return bean.getAttribute1() != null;
}
@Override
public String getTooltip(MyObject bean) {
return bean.getAttribute2(); //doesn't work
}
};
class:
public class ButtonCellDefinitionExtended<T> extends CellColumnDefinition<T, String> {
private String tooltipText;
private TooltipCellDecorator<String> cellDecorator;
private ButtonCell buttonCell;
public ButtonCellDefinitionExtended() {
buttonCell = new ButtonCell();
cellDecorator = new TooltipCellDecorator<>(buttonCell);
}
@Override
protected Cell<String> getCell() {
return cellDecorator;
}
@Override
protected String getValueOf(T bean) {
//Button
buttonCell.setEnabled(isEnabled(bean));
buttonCell.setVisible(isVisible(bean));
//Tooltip
if (getTooltip(bean) != null) {
cellDecorator.setText(getTooltip(bean));
}
cellDecorator.setPlacement(Placement.LEFT);
return getButtonText(bean);
}
P.S:每个按钮的可见性都已正确设置。
您可以使用 AbstractCell
and it's render()
方法获取(几乎)任何您喜欢的单元格。
请注意,AbstractCell
的构造函数采用 consumedEvents
参数,您可以在 onBrowserEvent()
方法中处理这些事件。
请注意,consumedEvents
是针对整个单元格触发的,而不仅仅是针对呈现的按钮。
隐藏按钮的最简单方法是不呈现任何内容 ;)
带工具提示的按钮的工作示例代码:
AbstractCell<String> cell = new AbstractCell<String>(ClickEvent.getType().getName()) {
@Override
public void render(Context context, String value, SafeHtmlBuilder sb) {
Button button = new Button("Button " + value);
button.setTitle(value);
sb.append(SafeHtmlUtils.fromTrustedString(button.toString()));
}
@Override
public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) {
if(event.getType() == ClickEvent.getType().getName())
Window.alert("Clicked: " + value);
}
};
table.addColumn(new Column<String, String>(cell) {
@Override
public String getValue(String object) {
return object;
}
}, "Buttons");
table.setRowData(Arrays.asList("A", "B", "C"));
RootPanel.get().add(table);
结果:包含带有工具提示的按钮的列:
我在 GWT 中有一个 CellTable,其中最后一列是 ButtonCell。我想根据所用对象的属性向按钮添加工具提示。问题是每个对象都有不同的属性值,但 GWT 为所有按钮显示相同的工具提示文本(取自 table 的最后一行)。有什么建议吗?
final ButtonCellDefinitionExtended<MyObject> def = new ButtonCellDefinitionExtended<MyObject>() {
@Override
public boolean isVisible(MyObject bean) {
return bean.getAttribute1() != null;
}
@Override
public String getTooltip(MyObject bean) {
return bean.getAttribute2(); //doesn't work
}
};
class:
public class ButtonCellDefinitionExtended<T> extends CellColumnDefinition<T, String> {
private String tooltipText;
private TooltipCellDecorator<String> cellDecorator;
private ButtonCell buttonCell;
public ButtonCellDefinitionExtended() {
buttonCell = new ButtonCell();
cellDecorator = new TooltipCellDecorator<>(buttonCell);
}
@Override
protected Cell<String> getCell() {
return cellDecorator;
}
@Override
protected String getValueOf(T bean) {
//Button
buttonCell.setEnabled(isEnabled(bean));
buttonCell.setVisible(isVisible(bean));
//Tooltip
if (getTooltip(bean) != null) {
cellDecorator.setText(getTooltip(bean));
}
cellDecorator.setPlacement(Placement.LEFT);
return getButtonText(bean);
}
P.S:每个按钮的可见性都已正确设置。
您可以使用 AbstractCell
and it's render()
方法获取(几乎)任何您喜欢的单元格。
请注意,AbstractCell
的构造函数采用 consumedEvents
参数,您可以在 onBrowserEvent()
方法中处理这些事件。
请注意,consumedEvents
是针对整个单元格触发的,而不仅仅是针对呈现的按钮。
隐藏按钮的最简单方法是不呈现任何内容 ;)
带工具提示的按钮的工作示例代码:
AbstractCell<String> cell = new AbstractCell<String>(ClickEvent.getType().getName()) {
@Override
public void render(Context context, String value, SafeHtmlBuilder sb) {
Button button = new Button("Button " + value);
button.setTitle(value);
sb.append(SafeHtmlUtils.fromTrustedString(button.toString()));
}
@Override
public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) {
if(event.getType() == ClickEvent.getType().getName())
Window.alert("Clicked: " + value);
}
};
table.addColumn(new Column<String, String>(cell) {
@Override
public String getValue(String object) {
return object;
}
}, "Buttons");
table.setRowData(Arrays.asList("A", "B", "C"));
RootPanel.get().add(table);
结果:包含带有工具提示的按钮的列: