2015-01-06 11 views
5
codice

Molto semplice:Why SortedList.add() genera UnsupportedOperationException?

import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.collections.transformation.SortedList; 

public final class SortedListTest { 

    public static void main(String[] args) { 
     final ObservableList<Integer> il = FXCollections.observableArrayList(); 
     final SortedList<Integer>  sil = new SortedList<>(il); 
     sil.comparatorProperty().set((l,r)-> l-r); 
     sil.add(12); 
    } 
} 

Esecuzione:

Exception in thread "main" java.lang.UnsupportedOperationException 
    at java.util.AbstractList.add(AbstractList.java:148) 
    at java.util.AbstractList.add(AbstractList.java:108) 
    at SortedListTest.main(SortedListTest.java:13) 

risposta

11

Un SortedList è una vista ordinata della sua lista sottostante. Se ti fosse permesso aggiungere elementi alla lista ordinata, avrebbe rotto quella relazione. È necessario aggiungere invece l'elemento all'elenco sottostante:

il.add(12); 
+0

Devo dare l'elenco ordinato al TableView e mantenere l'elenco sottostante nel mio modello. Le operazioni sul modello vengono eseguite nell'elenco sottostante quando le viste sono ordinate. Come posso esprimere un vincolo ordinato nel modello? – Aubin

+0

Non sono del tutto sicuro di aver capito, ma funzionerebbe per memorizzare una 'ObjectProperty >' nel modello (dove 'T' è il tipo di dati per la tabella), e (bidirezionalmente?) Legarlo al proprietà di confronto di 'SortedList'? –

+0

Questa deve essere una delle più stupide "utility" classi che hanno incluso in JavaFX .. se fallisce questo semplice caso d'uso. Prendo qualcosa come una casella combinata, imposta gli elementi su SortedList per comodità, e quindi tutte le chiamate a comboBox.getItems.add (...) falliranno? Facepalm ad un livello epico .... Perché mai non passano le chiamate add giù alla lista incartata? – user2163960

Problemi correlati