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

}

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

4

1 回答 1

1

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

在第二种情况下,您正在检查c.wasRemoved(),这意味着如果它为真,则元素已从 ObservableList 中删除。您删除的所有值都存储在getRemoved()子列表中,如果您尝试 fetch getAddedSubList(),您将得到一个空列表。

你需要使用

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

代替

observableForbiddenDeparture.remove(c.getAddedSubList().get(0));
于 2015-06-19T09:08:22.423 回答