我有一个事件处理程序,我想在打印新标签之前清除所有结果标签。我想保留其他不是类型结果的标签。该代码当前仅清除结果的最后一个实例。我需要添加什么循环?
# WRONG
- name: uninstall nomachine
apt:
deb: nomachine-enterprise-terminal-server
state: absent
# RIGHT
- name: Remove "foo" package
apt:
name: foo
state: absent
答案 0 :(得分:0)
问题是您为listOfCars
中的每辆汽车创建了标签“结果”。因此,第一行listLayout.getChildren().removeAll(result)
仅会删除最后创建的Label。如果列表中有10辆汽车,则将创建10个Label对象,但是只能通过result
引用最后一个。
如果要删除所有创建的标签(并且不删除其他控件),建议您引入Label
的子类:
class CarLabel extends Label {
CarLabel(String str) {
super(str);
}
}
然后在您的handle
方法中:
public void handle(ActionEvent event) {
listLayout.getChildren().removeIf(CarLabel.class::isInstance);
Collections.sort(listOfCars, ListYears.yearCom);
for(Object o : listOfCars) {
result = new CarLabel(o.toString());
result.setTranslateX(20);
result.setTranslateY(-40);
listLayout.getChildren().add(result);
}
}
答案 1 :(得分:-1)
removeAll(result)
只会删除listLayout.getChildren()
中与元素匹配的result
中的元素。
看看官方的documention for removeAll
如果要删除列表中包含的每个元素,请使用clear()
method
@Override
public void handle(ActionEvent event) {
listLayout.getChildren().clear()
// the list should be empty now
Collections.sort(listOfCars, ListYears.yearCom);
for (int i = 0; i < listOfCars.size(); i++) {
newCarsListings = listOfCars.get(i).toString();
result = new Label(newCarsListings);
result.setTranslateX(20);
result.setTranslateY(-40);
listLayout.getChildren().addAll(result);
}
}
});