19

我正在使用 CellTable 来显示我的记录,但现在我想在用户单击单元格时显示一个选择框。还有一件事是选择框是我自己的小部件,而不是预定义的。你能建议我这样做的任何方法吗?

4

5 回答 5

24

GWT google group 上有一篇帖子讨论了答案。基本上,您可以正常创建自定义小部件,并在渲染函数中使用 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()); 
        }
}
于 2011-03-17T12:33:45.227 回答
10

这是一种反模式。单元格的全部目的是让您没有小部件:您应该直接在单元格中“渲染” html。

于 2011-05-06T21:24:02.280 回答
7

GWT google group 上有一篇帖子讨论了答案。基本上,您可以正常创建自定义小部件,并在渲染函数中使用 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!!!
    }
});
于 2013-03-12T14:38:07.863 回答
3

前段时间我遇到了类似的问题(尝试将自定义小部件插入 CellList 单元格),但不幸的是没有找到简单的解决方案。

通常,您可以实现特定的单元类,扩展AbstractCellActionCell。在这种情况下,您将不得不重写 render() 方法并实现您自己的渲染。AbstractCell 类 javadoc给出了很好的例子。

于 2011-01-29T07:58:15.743 回答
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");
于 2020-12-12T21:26:22.337 回答