首先 - 每个 GWT CellTable Column 只是一个 Cell(s) 堆栈,因为我们需要让每个 Cell 看起来像一个可以监听 Click 事件的锚点,让我们提供 ClickableTextCell 作为 Column 的参数。
Column<YourObj, String> col = new Column<YourObj, String>(new ClickableTextCell()) {};
第二个 - 在你的 Column 实例中覆盖“render()”方法并构建你想要的 HTML 模板,这里我们需要创建一个锚。
@Override
public void render(Context context, YourObj yourObj, SafeHtmlBuilder sb) {
sb.appendHtmlConstant("<a style='text-decoration:underline; cursor: pointer;'>" + yourObj.getX() + "</a>");
}
3rd - 当我们使用 ClickableTextCell 时,它作为 Click 事件源。我们需要提供 ClickEvent 监听器,我们通过覆盖“onBrowserEvent()”方法来实现。
@Override
public void onBrowserEvent(Context context, Element elem, Customer customer, NativeEvent event) {
if ("click".equals(event.getType())) {
Window.alert("ID is : " + customer.getId());
}
}
完整代码sn-p:
Column<YourObj, String> col = new Column<YourObj, String>(new ClickableTextCell()) {
@Override
public String getValue(final YourObj yourObj) {
return yourObj.getX();
}
@Override
public void render(Context context, YourObj yourObj, SafeHtmlBuilder sb) {
sb.appendHtmlConstant("<a style='text-decoration:underline; cursor: pointer;'>" + yourObj.getX() + "</a>");
}
@Override
public void onBrowserEvent(Context context, Element elem, YourObj yourObj, NativeEvent event) {
if ("click".equals(event.getType())) {
Window.alert("ID is : " + yourObj.getId());
}
}
};
cellTable.addColumn(col, "First Name");