使用 Controls FX 的 CheckListView 时出现异常
Exception when using CheckListView of Controls FX
我有错误:
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));
}
}
});
}
第二种情况下触发的错误,已删除。
如果元素被删除并调用 ListChangeListener
,那么您的更改将包含项目列表 removed
而不是项目列表 added
。
在第二种情况下,您正在检查 c.wasRemoved()
,这意味着如果它为真,则元素已从 ObservableList 中删除。您删除的所有值都存储在 getRemoved()
子列表中,如果您尝试获取 getAddedSubList()
,您将得到一个空列表。
你需要使用
observableForbiddenDeparture.remove(c.getRemoved().get(0));
而不是
observableForbiddenDeparture.remove(c.getAddedSubList().get(0));
我有错误:
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));
}
}
});
}
第二种情况下触发的错误,已删除。
如果元素被删除并调用 ListChangeListener
,那么您的更改将包含项目列表 removed
而不是项目列表 added
。
在第二种情况下,您正在检查 c.wasRemoved()
,这意味着如果它为真,则元素已从 ObservableList 中删除。您删除的所有值都存储在 getRemoved()
子列表中,如果您尝试获取 getAddedSubList()
,您将得到一个空列表。
你需要使用
observableForbiddenDeparture.remove(c.getRemoved().get(0));
而不是
observableForbiddenDeparture.remove(c.getAddedSubList().get(0));