使用检查列表时异常控制 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(),这意味着如果为真,则元素已从可观察列表中删除。所有删除的值都存储在子列表中getRemoved()如果您尝试获取getAddedSubList(),您将获得一个空列表。

您需要使用

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

而不是

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

最新更新