我有一个
MultiSelectComboBox
,但是当尝试通过其 select()
方法选择某些项目时,没有任何反应。
我的代码如下:
Binder<Technology> binder = new BeanValidationBinder<>(Technology.class);
MultiSelectComboBox<TechnologyLabel> multiComboBox = new MultiSelectComboBox<>("Labels");
binder
.forField(this.multiComboBox)
.bind(Technology::getLabels, Technology::setLabels);
List<TechnologyLabel> labelList = technologyLayout.technologyLabelService.getTechnologyLabels(technology);
List<Label> containedLabels = new ArrayList<>();
for (var tl : labelList) {
containedLabels.add(tl.getLabel());
}
List<Label> labels = labelService.findAllLabels();
for (var label : labels) {
if (!containedLabels.contains(label)) {
labelList.add(new TechnologyLabel(technology, label));
}
}
multiComboBox.setItems(labelList);
multiComboBox.setItemLabelGenerator(TechnologyLabel::getLabelName);
note.setMaxHeight("10em");
multiComboBox.select(labelList.get(0);
我上面所做的是查询我的
ManyToMany
关系,以找到给定 labels
的所有 technology
。然后我找到所有 labels
并从中创建一个 list
。最后,我尝试选择列表的第一项,但它旁边没有显示勾号。
基本上使用@cfrick作为答案,所有功劳都归他所有,但我想留下一个正确的答案。我遇到了同样的问题,我在我的
equals
中定义了 hashcode
和 TechnologyLabel
方法,它开始工作。我只需在代码中通过 id
进行比较即可。
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
TechnologyLabel technologyLabel = (TechnologyLabel) obj;
return Objects.equals(id, technologyLabel.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}