2014-10-04 25 views
18

Próbuję utworzyć ChoiceBox w JavaFX 8, który wymaga kolekcji. Nie mogę dowiedzieć się, jak stworzyć kolekcję chociaż ... Gdy próbuję:Tworzenie obserwowalnej listy/kolekcji

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

pojawia się błąd mówiąc, nie mogę instancję ObservableList bo to streszczenie. Zrozumiale. Jeśli patrzę na dok dla ObservableList widzę, że SortedList realizuje ObservableList, ale nie mogę zrobić:

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

bo nie ma zastosowanie konstruktorów. Wygląda na to, że muszę mieć listę obserwowalną, która przejdzie do SortedList, co jest dziwne, ponieważ nie mogę utworzyć obiektu 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) 

Nie jestem pewien, jak to rozszyfrować. Jeśli spróbuję z desperacji, dostaję jeszcze bardziej zawiły błąd.

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

też nie działa. Jakoś to działa (ale najwyraźniej używa niebezpiecznej operacji):

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

Tak próbowałem:

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

ale nie ma szczęścia albo. Jestem zdezorientowany, robiąc to samo w kółko w nieskończonej pętli, próbując to zrozumieć. Dokumentacja, którą znalazłem, pokazuje przykłady, które nie pomagają lub brak przykładów. Oficjalna dokumentacja również jest bezużyteczna:

"Załóżmy na przykład, że masz kolekcję c, która może być listą, zestawem lub innym rodzajem kolekcji. Ten idiom tworzy nową ArrayList (implementację interfejs lista), początkowo zawierający wszystkie elementy w c.

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

" Tak, aby utworzyć ArrayList, implementację listy, muszę mieć listę. Powodem, dla którego poszedłem do dokumentacji, było przede wszystkim nauczenie się, jak zrobić to, co zakładają. Zgubiłem się. Wsparcie?

Odpowiedz

29

Stosować metody fabryki w FXCollections:

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

niebezpieczna operacja w konstruktorze pole wyboru jest, ponieważ nie określono typ dla pola wyboru:

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

i błędu od SortedList, ponieważ nie ma konstruktora nie biorąc żadnych argumentów. (Ponownie, odwołaj się do javadocs.) Istnieją dwa konstruktory: najprostszy przyjmuje odniesienie do ObservableList (lista, dla której posortowana lista zapewni posortowany widok). Więc trzeba coś podobnego

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

lub

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

myślałem, że próbował observableArrayList, ale najwyraźniej nie. Dzięki! – LilSweden

Powiązane problemy