我正在使用CellTable来显示我的记录,但现在我想在用户点击一个单元格时显示一个选择框。还有一件事是选择框是我自己的小部件,而不是预定义的。你能告诉我任何这样做的方法吗?
答案 0 :(得分:24)
GWT google小组上有一篇文章讨论the answer。基本上你正常创建自定义小部件,在render函数中你使用widget.getElement()。getInnterHTML()。
@Override
public void render(com.google.gwt.cell.client.Cell.Context context,
String value, SafeHtmlBuilder sb) {
if (value != null) {
MyWidget widget = new MyWidget(value);
sb.appendEscaped(widget.getElement.getInnerHTML());
}
}
答案 1 :(得分:10)
这是一种反模式。单元格的整个目的是让你没有小部件:你应该直接在单元格中“渲染”html。
答案 2 :(得分:7)
GWT google小组上有一篇文章讨论了答案。基本上你正常创建自定义小部件,在render函数中你使用widget.getElement()。getInnterHTML()。
@Override
public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) {
if (value != null) {
MyWidget widget = new MyWidget(value);
sb.appendEscaped(widget.getElement.getInnerHTML());
}
}
它有效,但有一个限制:
例如:
widget.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// Won't work!!!
}
});
或:
widget.getMyTextBox().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// Won't work!!!
}
});
答案 3 :(得分:2)
前段时间我遇到了类似的问题(尝试将自定义小部件插入到CellList单元格中),但遗憾的是没有找到一个简单的解决方案。
通常,您可以实施特定的细胞类,扩展AbstractCell或ActionCell。在这种情况下,您将不得不重写render()方法并实现自己的渲染。 AbstractCell class javadoc中给出了很好的例子。
答案 4 :(得分:0)
我认为@Kel提供了最接近的答案,我使用他的答案,发现ActionCell
可以使用IdentityColumn
和CellTable
可以使用IdentityColumn
ActionCell<MyEntity> refreshCell = new ActionCell<>("Refresh", new ActionCell.Delegate<MyEntity>() {
@Override
public void execute(MyEntity entity) {
//bla bla bla
}
});
IdentityColumn<MyEntity> refreshColumn = new IdentityColumn<>(refreshCell);
cellTable.addColumn(refreshColumn, "Refresh");