Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何删除事件处理程序上的所有标签单击_Java_Loops_Javafx_Eventhandler - Fatal编程技术网

Java 如何删除事件处理程序上的所有标签单击

Java 如何删除事件处理程序上的所有标签单击,java,loops,javafx,eventhandler,Java,Loops,Javafx,Eventhandler,我有一个事件处理程序,我想在打印新标签之前清除所有结果标签。我想保留其他不是result类型的标签。代码当前仅清除结果的最后一个实例。我需要添加什么循环 @Override public void handle(ActionEvent event) { listLayout.getChildren().removeAll(result); Collections.sort(listOfCars, ListYears.yearCom); for (int i = 0;

我有一个事件处理程序,我想在打印新标签之前清除所有结果标签。我想保留其他不是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);
    }
}
@覆盖
公共无效句柄(ActionEvent事件){
listLayout.getChildren().removeAll(结果);
Collections.sort(listOfCars,ListYears.yearCom);
for(int i=0;i
removeAll(result)
只会删除
listLayout.getChildren()
中与
result
中的元素匹配的元素

看一看那位官员

如果要删除列表中包含的每个元素,请使用
clear()

@覆盖
公共无效句柄(ActionEvent事件){
listLayout.getChildren().clear()
//列表现在应该是空的
Collections.sort(listOfCars,ListYears.yearCom);
for(int i=0;i
问题在于,您为
车辆列表中的每辆车创建了“结果”标签。因此,您的第一行
listLayout.getChildren().removeAll(result)
将只删除上次创建的标签。如果列表中有10辆车,则将创建10个标签对象,但只能通过
result
引用最后一个标签对象

如果您想删除所有创建的标签(而不删除其他控件),我建议您引入
Label
的子类:

class CarLabel extends Label {
    CarLabel(String str) {
        super(str);
    }
}
然后在您的
句柄
方法中:

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);
    }
}

@Wugi问题是.clear()删除布局中的所有内容,包括我希望保留的按钮和文本字段。我试图只删除result的实例,但使用.removeAll(result)只删除result Created的最后一个实例。那么您应该尝试澄清您的问题。子类真的有必要吗?如果他想删除所有标签,你可以很容易地调用
removeIf(Label.class::isInstance)
。@Zephyr我不知道你剩下的代码。只有当您的
列表布局
中有其他不代表汽车的
标签
对象时,此子类才是必需的。我不是OP.:)他们只是问如何删除所有标签;也许如果他们在问题中更清楚,我们可以给出一个更明确的答案。我在那里编辑了描述,我想保留布局中的其他标签,添加子类是有效的。感谢you@GearoidSheehan-如果此答案解决了您的问题,请确保通过单击上面的复选标记来接受。创建一个名为“删除”的新
ArrayList
。在子项中循环查找符合标准的标签。将这些标签添加到删除
ArrayList
。循环完成后,使用
listLayout.getChildren().removeAll(删除)。这似乎是一个设计缺陷。有人会认为,与其创建新的
标签
,不如使用
setText()
来更新
标签
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);
    }
}