通过单击按钮删除Vaadin表项

时间:2014-01-02 14:10:07

标签: java gwt vaadin vaadin7

我正在使用 Vaadin 7.1.7

我有一个表格,其中包含一些TextFields和一个名为“delete”的Button

Table with a TextField and a 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();
}

这让我到了父表,但没有到那个特定的项目。

提前致谢

2 个答案:

答案 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);

我没有测试或编译任何这些......你知道......