Лучший компонент Vaadin для списка строк

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