如何删除事件处理程序上的所有标签单击
How to remove all labels on event handler click
我有一个事件处理程序,我想在打印新标签之前清除所有结果标签。我想保留其他不是结果类型的标签。该代码目前仅清除结果的最后一个实例。我需要添加什么循环?
@Override
public void handle(ActionEvent event) {
listLayout.getChildren().removeAll(result);
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);
}
}
removeAll(result)
只会删除 listLayout.getChildren()
中与 result
.
中的元素匹配的元素
如果要删除列表包含的每个元素,请使用 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);
}
}
});
问题是您为 listOfCars
中的每辆车都创建了标签 "result"。所以你的第一行 listLayout.getChildren().removeAll(result)
只会删除最后创建的标签。如果您的列表中有 10 辆汽车,您将创建 10 个 Label 对象,但只有最后一个可以通过 result
.
引用
如果你想删除所有你创建的Labels(而不是其他控件),我建议你引入一个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);
}
}
我有一个事件处理程序,我想在打印新标签之前清除所有结果标签。我想保留其他不是结果类型的标签。该代码目前仅清除结果的最后一个实例。我需要添加什么循环?
@Override
public void handle(ActionEvent event) {
listLayout.getChildren().removeAll(result);
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);
}
}
removeAll(result)
只会删除 listLayout.getChildren()
中与 result
.
如果要删除列表包含的每个元素,请使用 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);
}
}
});
问题是您为 listOfCars
中的每辆车都创建了标签 "result"。所以你的第一行 listLayout.getChildren().removeAll(result)
只会删除最后创建的标签。如果您的列表中有 10 辆汽车,您将创建 10 个 Label 对象,但只有最后一个可以通过 result
.
如果你想删除所有你创建的Labels(而不是其他控件),我建议你引入一个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);
}
}