Лучший Vaadin компонент для списка строк - PullRequest
0 голосов
/ 13 апреля 2019

Моя проблема в том, что у меня есть простой список строк, скажем

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.И я не знаю почему.Откуда они?

Ответы [ 4 ]

2 голосов
/ 13 апреля 2019

Каковы требования к их отображению? Просто чтобы вывести их на экран? Достаточно ли ярлыка?

for(String name: names) {
  mylayout.addComponent(new Label(name))
}

Если вам нужен выбор, то, возможно, ListSelect или ComboBox - это то, что вам нужно.

1 голос
/ 15 апреля 2019

Если вы хотите избежать дополнительных столбцов, один из способов - это сделать, как было указано в комментарии, т.е. сделать removeAllColumns(), прежде чем продолжать создавать свои собственные столбцы.

Другой подход заключается всделать new Grid<>() вместо new Grid<>(String.class).Основное отличие состоит в том, что второй конструктор использует отражение в предоставленном классе и автоматически настраивает столбцы для всего, что выглядит как обычные свойства Java-бина.

0 голосов
/ 15 апреля 2019

Я сделал что-то похожее на добавление строк в TextAreas. Поскольку мне нужно было некоторое форматирование, я добавил текст с помощью 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());
 }

Результат примерно такой:

enter image description here

0 голосов
/ 15 апреля 2019

Я бы предпочел использовать grid.removeColumnByKey вместо removeAllColumns() Вы также можете использовать grid.setColumns, чтобы указать порядок столбцов.

Я добавлю ссылку на документацию vaadin для сетки с примерами Java, которая действительно полезна. введите описание ссылки здесь

...