我有错误:
Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index: 0
我认为这是因为我必须使用Platform.runLater()
,但似乎错误并非来自此。
这是我尝试使用Platform.runLater()
更正的功能:
public void setListAirportForFilter(ListAirport listAirport){
this.myListAirport = listAirport;
departureCheckListView.setItems(myListAirport.getObservableDepartureAirtport());
arrivalCheckListView.setItems(myListAirport.getObservableArrivalAirport());
departureCheckListView.getCheckModel().getCheckedItems().addListener(new ListChangeListener<String>() {
@Override
public void onChanged(ListChangeListener.Change<? extends String> c) {
c.next();
if(c.wasAdded()) {
observableForbiddenDeparture.add(c.getAddedSubList().get(0));
System.out.println("Item Checked : " + c.getAddedSubList().get(0));
}
else if (c.wasRemoved()) {
observableForbiddenDeparture.remove(c.getAddedSubList().get(0));
System.out.println("Item Unchecked : " + c.getRemoved().get(0));
}
}
});
}
在第二种情况下触发了错误,删除了。
答案 0 :(得分:1)
如果某个元素已移除并且调用了ListChangeListener
,那么您的更改将包含项目列表removed
,而不是项目列表added
。
在第二种情况下,您正在检查c.wasRemoved()
,这意味着如果确实如此,则从ObservableList中删除元素。您删除的所有值都存储在getRemoved()
子列表中,如果您尝试获取getAddedSubList()
,则会获得一个空列表。
您需要使用
observableForbiddenDeparture.remove(c.getRemoved().get(0));
而不是
observableForbiddenDeparture.remove(c.getAddedSubList().get(0));