使用Controls FX的CheckListView时出现异常

时间:2015-06-19 08:18:51

标签: javafx controlsfx

我有错误

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

}

在第二种情况下触发了错误,删除了。

1 个答案:

答案 0 :(得分:1)

如果某个元素已移除并且调用了ListChangeListener,那么您的更改将包含项目列表removed,而不是项目列表added

在第二种情况下,您正在检查c.wasRemoved(),这意味着如果确实如此,则从ObservableList中删除元素。您删除的所有值都存储在getRemoved()子列表中,如果您尝试获取getAddedSubList(),则会获得一个空列表。

您需要使用

observableForbiddenDeparture.remove(c.getRemoved().get(0));

而不是

observableForbiddenDeparture.remove(c.getAddedSubList().get(0));