gpt4 book ai didi

java - Vaadin 8 - 对 ComboBox 中的项目进行排序

转载 作者:行者123 更新时间:2023-11-30 06:45:44 28 4
gpt4 key购买 nike

我有一个 Integer 类型的 ComboBox,我这样设置:

Collection<Integer> cbItems = new HashSet<>();
for(Integer i = 100; i < 360; i+=5){
cbItems.add(i);
}
ComboBox<Integer> cb = new ComboBox<>();
cb.setItems(cbItems);

我创建了一个整数集合,并用特定的整数值(100、105、110 等)填充它。代码编译,组合框显示在 View 中。

我的问题是 ComboBox 中的项目没有排序(或者更好:没有按照我认为的方式排序)。

Screenshot of the actual Combobox

为什么它会重新排序我的整数集合,我该如何防止它?

最佳答案

我建议您填充 ComboBoxDataProvider 等组件。这将使以后的事情变得更容易。

如果以后没有向其他地方的 ComboBox 添加项目,您自己的解决方案就可以正常工作。如果添加了项目,可能需要再次执行 Collections.sort()

使用 DataProvider 稍作更改:

ListDataProvider<Integer> dp = new ListDataProvider<>(cbItems);
// the first param is function that returns the value to sort
// in case of Integer it is that Integer itself.
dp.setSortOrder(i -> {return i;}, SortDirection.ASCENDING);
ComboBox<Integer> combo = new ComboBox<>();
combo.setDataProvider(dp);

现在,如果您稍后将项目添加到组合(通过原始 Collection):

// add some items to see where they are sorted
cbItems.add(102);
cbItems.add(113);

这些项目应该被排序到 ComboBox 中的正确位置。

然后考虑一个更复杂的例子。如果你有这样的类(class):

@RequiredArgsConstructor
public class Wrapper {
@Getter
private final Integer id;
@Getter
private final String name;
}

并且您想按名称降序对它进行排序,就像(带有测试数据):

// generate some dymmy data
Collection<Wrapper> wrappers = new HashSet<>();
for(int i=1000; i<=2000; i+=150) {
wrappers.add(new Wrapper(i,
"Rand"+ThreadLocalRandom.current().nextInt(5000, 6000)) );
}

ListDataProvider<Wrapper> dpWrappers = new ListDataProvider<>(wrappers);
// now function returns the name of the wrapper to sort as sort argument
dpWrappers.setSortOrder(wrapper -> {return wrapper.getName();},
SortDirection.DESCENDING);

ComboBox<Wrapper> comboWrappers = new ComboBox<>();
comboWrappers.setDataProvider(dpWrappers);
// remember to set this to have the name of wrapper in combo vaptions
// instead of the value of Wrapper.toString();
comboWrappers.setItemCaptionGenerator( item -> {return item.getName();});

关于java - Vaadin 8 - 对 ComboBox<Integer> 中的项目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48427702/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com