我的问题是我有一个简单的字符串列表说
List<String> names = List.of("Frank","Joe","Eva");
我想要的就是在UI上显示它。用一些简单的代码就好了
ListComponent lc = new ListComponent.setItems(names);
我已经尝试使用Table似乎可以工作,但它后面的代码对于这个简单的任务(7-8代码行)来说有点样板。
我也尝试过Grid组件,当我想将POJO绑定到它时,它运行良好,但是使用String.class键入它是一个噩梦。
Grid<String> listGrid= new Grid<>(String.class) ;
listGrid.setItems(names);
它不起作用,因为我必须为列提供getters,String.class没有为该值提供。所以我这样做了:
Grid<String> listGrid= new Grid<>(String.class) ;
listGrid.setItems(names);
listGrid.addColumn(String::toString).setCaption("name");
有用!但是未指定的列也会出现在网格中,所以现在我有3列Byte,Empty,name。我不知道为什么。这些来自哪里?
显示它们有什么要求?只是为了让他们在屏幕上?标签够了吗?
for(String name: names) {
mylayout.addComponent(new Label(name))
}
如果您需要选择,那么ListSelect或ComboBox可能是最佳选择。
如果你想避免使用其他列,一种方法是按照注释中的指示进行操作,即在继续创建自己的列之前执行removeAllColumns()
。
另一种方法是做new Grid<>()
而不是new Grid<>(String.class)
。主要区别在于第二个构造函数对提供的类使用反射,并自动为任何看起来像常规Java bean属性的列配置列。
我更倾向于使用grid.removeColumnByKey
而不是removeAllColumns()
您也可以使用grid.setColumns
来指定列的顺序。
我将添加链接到vaadin文档的网格与java示例,这是非常有用的。 qazxsw poi
我做了一些类似于在TextAreas中添加字符串的东西。因为我需要一些格式化,所以我使用StringBuilder添加了文本。
enter link description here
结果是这样的:
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());
}