为什么我不能在 CellTable 中使用 GWT 按钮以及如何将单元格按钮与单元格文本组合
Why can't I use GWT Button in a CellTable and how to combine cell buttons with cell text
我想在 CellTable 中放置一些文本和几个按钮。我可以显示文本和按钮,但是当我点击按钮时,没有任何反应。
final SafeHtmlCell detailsCell = new SafeHtmlCell();
Column<UIRow, SafeHtml> detailsColumn = new Column<UIRow, SafeHtml>(
detailsCell) {
@Override
public SafeHtml getValue(UIRow object) {
String details = "some informations xxx <br/>";
Button addButton = new Button("Add value", new ClickHandler() {
public void onClick(ClickEvent event) {
Window.alert("hello");
}
});
details += addButton;
SafeHtmlBuilder sb = new SafeHtmlBuilder();
sb.appendHtmlConstant(details);
return sb.toSafeHtml();
}
};
detailsColumn.setCellStyleNames(CSS_DETAILS_TD);
table.setColumnWidth(detailsColumn, "10%");
table.addColumn(detailsColumn, new SafeHtmlHeader(SafeHtmlUtils.fromSafeConstant("details")));
但是,如果我在每个单元格中放置一个按钮,它就会工作,调用 onClick 方法:
final ButtonCell btnCell = new ButtonCell() {
@Override
public void render(
final Context context,
final SafeHtml data,
final SafeHtmlBuilder sb) {
sb.appendHtmlConstant("<button type=\"button\" style=\"height: 25px\" title=\"submit\" class=\"btn btn-success btn-small\" tabindex=\"-1\">");
if (data != null) {
sb.append(data);
}
sb.appendHtmlConstant("</button>");
}
};
Column<UIRow, String> btnColumn = new Column<UIRow, String>(btnCell) {
@Override
public String getValue(UIRow object) {
return "";
}
};
btnColumn.setCellStyleNames("td-actions");
table.addColumn(btnColumn, "");
table.setColumnWidth(btnColumn, "5%");
btnColumn.setFieldUpdater(new FieldUpdater<UIRow, String>() {
public void update(int index, UIRow object, String value) {
...
service.submit(object, false, new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(String result) {
Window.alert(result);
}
});
}
});
}
我想在一个 Col/Cell 中显示 Html 文本和按钮,可以吗?
谢谢
单元格小部件(CellTable、DataGrid 等)并非设计用于嵌入像 Button 这样的常规 GWT 小部件。
对于按钮,您可以使用 ButtonCell
看官方例子:
http://samples.gwtproject.org/samples/Showcase/Showcase.html#!CwCellSampler
更新:
关于如何合并单元格的问题的第二部分,有几个选项:
查看 CompositeCell 您可以在其中合并多个单元格(例如 ButtonCell 和 TextCell)。
另一种选择是使用自定义 CellTableBuilder,您可以在其中自定义 table 渲染的所有方面,例如 colspans、column/row 装饰等
我想在 CellTable 中放置一些文本和几个按钮。我可以显示文本和按钮,但是当我点击按钮时,没有任何反应。
final SafeHtmlCell detailsCell = new SafeHtmlCell();
Column<UIRow, SafeHtml> detailsColumn = new Column<UIRow, SafeHtml>(
detailsCell) {
@Override
public SafeHtml getValue(UIRow object) {
String details = "some informations xxx <br/>";
Button addButton = new Button("Add value", new ClickHandler() {
public void onClick(ClickEvent event) {
Window.alert("hello");
}
});
details += addButton;
SafeHtmlBuilder sb = new SafeHtmlBuilder();
sb.appendHtmlConstant(details);
return sb.toSafeHtml();
}
};
detailsColumn.setCellStyleNames(CSS_DETAILS_TD);
table.setColumnWidth(detailsColumn, "10%");
table.addColumn(detailsColumn, new SafeHtmlHeader(SafeHtmlUtils.fromSafeConstant("details")));
但是,如果我在每个单元格中放置一个按钮,它就会工作,调用 onClick 方法:
final ButtonCell btnCell = new ButtonCell() {
@Override
public void render(
final Context context,
final SafeHtml data,
final SafeHtmlBuilder sb) {
sb.appendHtmlConstant("<button type=\"button\" style=\"height: 25px\" title=\"submit\" class=\"btn btn-success btn-small\" tabindex=\"-1\">");
if (data != null) {
sb.append(data);
}
sb.appendHtmlConstant("</button>");
}
};
Column<UIRow, String> btnColumn = new Column<UIRow, String>(btnCell) {
@Override
public String getValue(UIRow object) {
return "";
}
};
btnColumn.setCellStyleNames("td-actions");
table.addColumn(btnColumn, "");
table.setColumnWidth(btnColumn, "5%");
btnColumn.setFieldUpdater(new FieldUpdater<UIRow, String>() {
public void update(int index, UIRow object, String value) {
...
service.submit(object, false, new AsyncCallback<String>() {
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
@Override
public void onSuccess(String result) {
Window.alert(result);
}
});
}
});
}
我想在一个 Col/Cell 中显示 Html 文本和按钮,可以吗?
谢谢
单元格小部件(CellTable、DataGrid 等)并非设计用于嵌入像 Button 这样的常规 GWT 小部件。
对于按钮,您可以使用 ButtonCell
看官方例子: http://samples.gwtproject.org/samples/Showcase/Showcase.html#!CwCellSampler
更新:
关于如何合并单元格的问题的第二部分,有几个选项:
查看 CompositeCell 您可以在其中合并多个单元格(例如 ButtonCell 和 TextCell)。
另一种选择是使用自定义 CellTableBuilder,您可以在其中自定义 table 渲染的所有方面,例如 colspans、column/row 装饰等