Удаление элемента таблицы Vaadin нажатием кнопки

Я использую Vaadin 7.1.7.

У меня есть таблица с несколькими текстовыми полями и Button под названием «удалить».

Таблица с текстовым полем и кнопкой

При нажатии кнопки удаления эта конкретная строка должна быть удалена.

Насколько я понимаю, я мог бы удалить элемент таблицы следующим образом:

table.removeItem(itemID);

К сожалению, я не могу получить itemID строки, чтобы удалить ее из таблицы.

Поскольку я использовал table.addItem(o, null); для добавления к нему элементов, как я мог получить rowID/itemID по нажатию кнопки внутри buttonClickListener?

Мои попытки до сих пор были:

@Override
public void buttonClick(ClickEvent event) {
Table t =  (Table) event.getButton().getParent();
}

Это привело меня к родительской таблице, но не к этому конкретному элементу.

Заранее спасибо .


person Namenoobie    schedule 02.01.2014    source источник


Ответы (2)


Например, вы можете использовать setData(rowID) при создании кнопок. OnClick вы извлекаете связанные данные кнопки и имеете правильный идентификатор строки.

person André Schild    schedule 02.01.2014

Укажите идентификатор строки, переопределите Button.ClickListener и используйте идентификатор в прослушивателе кликов.

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);
    }
}

Или решение Андре Шильда, которое заключается в использовании 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));

Мне немного больше нравится первое решение, потому что оно более очевидно, что происходит, а также потому, что кнопка имеет правильный идентификатор строки до того, как она будет добавлена ​​в таблицу, а не после.

Или, если вам хочется создать что-то неприятное: вы можете использовать объект Button в качестве идентификатора строки.

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

Я ничего из этого не тестировал и не компилировал, так что... знаете...

person ktbiz    schedule 04.01.2014