我正在使用 Vaadin 7.1.7 。
我有一个表格,其中包含一些TextFields和一个名为“delete”的Button
。
单击删除按钮,将删除该特定行。
据我了解,我可以删除表项目如下:
table.removeItem(itemID);
很遗憾,我无法获取该行的itemID
以将其从表格中删除。
由于我使用了table.addItem(o, null);
addItems,如何点击rowID/itemID
内的按钮获取buttonClickListener
?
我到目前为止的尝试是:
@Override
public void buttonClick(ClickEvent event) {
Table t = (Table) event.getButton().getParent();
}
这让我到了父表,但没有到那个特定的项目。
提前致谢
答案 0 :(得分:2)
例如,您可以在创建按钮时使用setData(rowID)
。
onClick可以检索按钮的关联数据并具有正确的行ID。
答案 1 :(得分:1)
提供行ID,覆盖Button.ClickListener,并在点击侦听器中使用id。
Object rowId = new Object();
Button button = new Button("Delete");
button.addClickListener(new RowDeleteListener(rowId));
//populate cells in the row, add the button & whatever
table.addItem(row, rowId);
public class RowDeleteListener implements Button.ClickListener {
Object rowId;
public RowDeleteListener(Object rowId) {
this.rowId = rowId;
}
public void buttonClick(ClickEvent event) {
table.removeItem(rowId);
}
}
或André Schild’s solution,即在按钮上使用setData(rowId)
。
Button button = new Button("Delete");
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
table.removeItem(getData());
}
});
//Populate row stuff.
button.setData(table.addItem(row, null));
我更喜欢第一个解决方案,因为它更明显地发生了什么,也因为按钮在添加到表而不是之后具有正确的行ID。
或者,如果你想创造令人讨厌的东西:你可以使用Button对象作为行的id。
Button button = new Button("Delete");
button.addClickListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
table.removeItem(this);
}
});
//populate row stuff, including adding the button to the row.
table.addItem(row, button);
我没有测试或编译任何这些......你知道......