使用 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));