String列表的最佳Vaadin组件

问题描述 投票:0回答:4

我的问题是我有一个简单的字符串列表说

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。我不知道为什么。这些来自哪里?

java vaadin vaadin7
4个回答
2
投票

显示它们有什么要求?只是为了让他们在屏幕上?标签够了吗?

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

如果您需要选择,那么ListSelect或ComboBox可能是最佳选择。


1
投票

如果你想避免使用其他列,一种方法是按照注释中的指示进行操作,即在继续创建自己的列之前执行removeAllColumns()

另一种方法是做new Grid<>()而不是new Grid<>(String.class)。主要区别在于第二个构造函数对提供的类使用反射,并自动为任何看起来像常规Java bean属性的列配置列。


0
投票

我更倾向于使用grid.removeColumnByKey而不是removeAllColumns()您也可以使用grid.setColumns来指定列的顺序。

我将添加链接到vaadin文档的网格与java示例,这是非常有用的。 qazxsw poi


0
投票

我做了一些类似于在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()); }

© www.soinside.com 2019 - 2024. All rights reserved.