2014-10-04 14 views
18

Sto provando a creare un ChoiceBox in JavaFX 8, che richiede una raccolta. Io non riesco a capire come creare una collezione però ... Se provo:Creazione di una lista/collezione osservabile

ObservableList<String> list = new ObservableList<String>(); 

ottengo un errore che dice che non posso istanziare ObservableList perché è astratta. Comprensibile. Se guardo il doc per ObservableList posso vedere che SortedList implementa ObservableList, ma non posso fare:

ObservableList<String> list = new SortedList<String>(); 

perché non c'è costruttori applicabili. A quanto pare ho bisogno di avere una ObservableList per passare alla SortedList, il che è strano perché non riesco a creare una ObservableList.

constructor SortedList.SortedList(ObservableList<? extends String>,Comparator<? super String>) is not applicable 
    (actual and formal argument lists differ in length) 
constructor SortedList.SortedList(ObservableList<? extends String>) is not applicable 
    (actual and formal argument lists differ in length) 

Non sono sicuro di come decifrarlo. Se provo

ObservableList<String> list = new SortedList<SortedList<String>>(); 
//or 
ObservableList<String> list = new SortedList<ObservableList<String>>(); 

per disperazione, ottengo un errore ancora più contorto.

SortedList<String> list = new SortedList<String>(); 

non funziona. In qualche modo questo funziona (ma a quanto pare utilizza un'operazione non sicura):

ChoiceBox box = new ChoiceBox(FXCollections.observableArrayList("Asparagus", "Beans", "Broccoli", "Cabbage" , "Carrot", "Celery", "Cucumber", "Leek", "Mushroom" , "Pepper", "Radish", "Shallot", "Spinach", "Swede" , "Turnip")); 

Così ho provato:

ObservableList<string> list = new FXCollections.observableArrayList("Asparagus", "Beans", "Broccoli", "Cabbage" , "Carrot", "Celery", "Cucumber", "Leek", "Mushroom" , "Pepper", "Radish", "Shallot", "Spinach", "Swede" , "Turnip"); 

ma senza fortuna neanche lì. Sono super confuso, facendo sempre gli stessi schemi in un ciclo infinito di tentativi di capire questo. La documentazione che ho trovato mostra esempi che non aiutano o nessun esempio. Anche la documentazione ufficiale è inutile:

"Supponiamo, ad esempio, di disporre di una raccolta c, che può essere una lista, un set o un altro tipo di raccolta. Questo idioma crea una nuova ArrayList (un'implementazione del interfaccia List), inizialmente contenente tutti gli elementi in c.

List<String> list = new ArrayList<String>(c); 

" in modo da creare ArrayList, un'implementazione di List, ho bisogno di avere un elenco. la ragione per cui sono andato alla documentazione, in primo luogo, è stato imparare a fare quello che stanno assumendo che io abbia. Mi sono perso. Aiuto?

risposta

29

Utilizzare i metodi dello stabilimento di FXCollections:

ObservableList<String> list = FXCollections.observableArrayList(); 

Il funzionamento non sicuro nel costruttore di dialogo scelta è perché non è stato specificato il tipo per la casella scelta:

ChoiceBox<String> box = new ChoiceBox<>(FXCollections.observableArrayList("Asparagus", "Beans", "Broccoli", "Cabbage" , "Carrot", "Celery", "Cucumber", "Leek", "Mushroom" , "Pepper", "Radish", "Shallot", "Spinach", "Swede" , "Turnip")); 

e l'errore da SortedList è perché non c'è nessun costruttore che non accetta argomenti. (Anche in questo caso, fare riferimento a javadocs.) Esistono due costruttori: il più semplice prende un riferimento a uno ObservableList (l'elenco per il quale l'elenco ordinato fornirà una vista ordinata). Così si avrebbe bisogno di qualcosa come

SortedList<String> sortedList = new SortedList<>(list); 

o

SortedList<String> sortedList = new SortedList<>(FXCollections.observableArrayList()); 
+0

pensavo di aver provato observableArrayList, ma a quanto pare no. Grazie! – LilSweden

Problemi correlati