ваадин: несколько ссылок в одном поле таблицы


Я хочу спросить об интерфейсе vaadin, который является таблицей. Если я использовал этот компонент, то я должен создать поле с помощью этой команды:

userTable.addContainerProperty("Status", String.class, "Active");

Если я хочу создать ссылку на это поле, то я должен сделать так:

userTable.addContainerProperty("Action", Link.class, new Link("Remove", new ExternalResource("#")));

Мой вопрос заключается в том, что в приведенном выше примере отображается только одна ссылка в одном поле, которое является REMOVE Link. Я хочу создать две ссылки в одном поле этой таблицы. Например, ссылка для редактирования и удаления под полем "действие", как я могу это сделать?

2 3

2 ответа:

Используйте сгенерированный столбец для добавления компонентов в каждую строку. Создайте горизонтальный макет и две кнопки в качестве содержимого.

class ValueColumnGenerator implements Table.ColumnGenerator {
String format; /* Format string for the Double values. */

/**
 * Creates double value column formatter with the given
 * format string.
 */
public ValueColumnGenerator(String format) {
    this.format = format;
}

/**
 * Generates the cell containing the Double value.
 * The column is irrelevant in this use case.
 */
public Component generateCell(Table source, Object itemId,
                              Object columnId) {
    // Get the object stored in the cell as a property
    Property prop =
        source.getItem(itemId).getItemProperty(columnId);
    if (prop.getType().equals(Double.class)) {
        HorizontalLayout hbox = new HorizontalLayout()
        hbox.addComponent(new Button("Status"))
        hbox.addComponent(new Button("Remove"))
        return hbox;
    }
    return null;
}
}

См. раздел 5.14.5 книги фреймворк Vaadin для получения дополнительной информации:

Https://vaadin.com/book/-/page/components.table.html

Вы можете добавить эти кнопки в HorizontalLayout или любой другой компонент контейнера. Затем добавьте этот макет в свойство контейнера в таблице.