我正在使用CellTable向其中添加列。 当我在每个单元格上添加行和单个数据时,它工作正常。
它包含名称,年龄,地址等标题,其下方的行包含值
我现在希望在最后一行中使用两个按钮(编辑和删除按钮)在此列下面的行中的单个单元格中捕获一个动作cloumn,并按顺序捕获按钮单击事件。
Name Age Address Actions
A 15 123 Edit Delete
B 20 578 Edit Delete
C
请你告诉我怎么做。
由于
答案 0 :(得分:12)
有两种方法可以实现这一目标:
第二种方法更简单,更清洁。这是代码:
public void onModuleLoad() {
CellTable<Person> table = new CellTable<Person>();
List<HasCell<Person, ?>> cells = new LinkedList<HasCell<Person, ?>>();
cells.add(new ActionHasCell("Edit", new Delegate<Person>() {
@Override
public void execute(Person object) {
// EDIT CODE
}
}));
cells.add(new ActionHasCell("Delete", new Delegate<Person>() {
@Override
public void execute(Person object) {
// DELETE CODE
}
}));
CompositeCell<Person> cell = new CompositeCell<Person>(cells);
table.addColumn(new TextColumn<Person>() {
@Override
public String getValue(Person object) {
return object.getName()
}
}, "Name");
// ADD Cells for Age and Address
table.addColumn(new Column<Person, Person>(cell) {
@Override
public Person getValue(Person object) {
return object;
}
}, "Actions");
}
private class ActionHasCell implements HasCell<Person, Person> {
private ActionCell<Person> cell;
public ActionHasCell(String text, Delegate<Person> delegate) {
cell = new ActionCell<Person>(text, delegate);
}
@Override
public Cell<Person> getCell() {
return cell;
}
@Override
public FieldUpdater<Person, Person> getFieldUpdater() {
return null;
}
@Override
public Person getValue(Person object) {
return object;
}
}
答案 1 :(得分:1)
上述解决方案非常完美!THX。 另外:如果您喜欢在ActionCell中设计按钮,那么您可以这样做 - &gt;在类的构造中,您可以构建一个html输入,在“class”属性中,您可以添加一个将被使用的css样式。:
public ActionHasCell(String text, Delegate<Person> delegate) {
cell = new ActionCell<Person>(text, delegate) {
public void render(Context context, Person person, SafeHtmlBuilder sb)
{
SafeHtml html = SafeHtmlUtils.fromTrustedString("<input type=\"button\" value=\"anynameyouwant\" class=\"cssstylename\" />");
sb.append(html);
}
};
}
这次你不需要String,但你可以传递参数并使用它们来构建按钮。