#java #vaadin #vaadin7
#java #vaadin #vaadin7
Вопрос:
Моя проблема в том, что у меня есть простой список строк, скажем
List<String> names = List.of("Frank","Joe","Eva");
Все, что я хочу, это отобразить его в пользовательском интерфейсе. С помощью некоторого простого кода, такого как
ListComponent lc = new ListComponent.setItems(names);
Я пробовал это с таблицей, которая, кажется, работает, но код, стоящий за ней, немного шаблонен для этой простой задачи (7-8 строк кода).
Я пробовал также компонент Grid, и он хорошо работает, когда я хочу привязать к нему POJO, но с String.class типа это кошмарный сон.
Grid<String> listGrid= new Grid<>(String.class) ;
listGrid.setItems(names);
это не работает, потому что я должен предоставить геттеры для столбца, который String.class не имеет значения для значения. Итак, я сделал это:
Grid<String> listGrid= new Grid<>(String.class) ;
listGrid.setItems(names);
listGrid.addColumn(String::toString).setCaption("name");
Это работает! Однако в сетке также отображаются неуказанные столбцы, так что теперь у меня есть 3 столбца Byte, Empty, name . И я не знаю почему. Откуда они берутся?
Комментарии:
1. Сначала удалите все ненужные столбцы с помощью
removeAllColumns().
Ответ №1:
Каковы требования к их отображению? Просто для того, чтобы вывести их на экран? Достаточно ли ярлыка?
for(String name: names) {
mylayout.addComponent(new Label(name))
}
Если вам нужен выбор, то, возможно, вам подойдут ListSelect или ComboBox.
Комментарии:
1. Я хочу отобразить их и отредактировать. каждая строка должна быть одним элементом списка.
Ответ №2:
Если вы хотите избежать дополнительных столбцов, один из способов — сделать так, как было указано в комментарии, т. Е. Сделать removeAllColumns()
, прежде чем переходить к созданию собственных столбцов.
Другой подход состоял бы в том , чтобы делать new Grid<>()
вместо new Grid<>(String.class)
. Основное отличие заключается в том, что второй конструктор использует отражение для предоставленного класса и автоматически настраивает столбцы для всего, что выглядит как обычные свойства Java bean.
Ответ №3:
Я бы очень предпочел использовать grid.removeColumnByKey
, а не removeAllColumns()
вы также можете использовать grid.setColumns
для указания порядка столбцов.
Я добавлю ссылку на vaadin documentantion для grid с примерами Java, что действительно полезно. введите описание ссылки здесь
Ответ №4:
Я сделал что-то похожее на добавление строк в текстовые области. Поскольку мне нужно было некоторое форматирование, я добавил текст с помощью StringBuilder.
List<String> details = getDetails();
StringBuilder builder = new StringBuilder();
for (String detail : details) {
TextArea ta = new TextArea();
ta.setSizeFull();
ta.setMaxHeight("100px");
ta.setValue(builder.append(detail).toString());
((Span) content).add(ta);
((Span) content).add(new Hr());
}
Результат выглядит так:
Ответ №5:
Попробуйте это
final Grid<String> grid = new Grid<>();
grid.setItems(new ArrayList<String>());
grid.addColumn(item -> item).setHeader("Value");