Создание наблюдаемого списка / коллекции

19

Я пытаюсь создать ChoiceBox в JavaFX 8, для которого требуется Collection . Я не могу понять, как создать Collection , хотя ... Если я попробую:

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

Я получаю сообщение об ошибке: я не могу создать экземпляр ObservableList , потому что он абстрактный. Понятный. Если я посмотрю на документ для ObservableList , я вижу, что SortedList implements ObservableList , но я не могу:

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

Потому что нет подходящего конструктора. По-видимому, мне нужно, чтобы ObservableList перешло к SortedList , что нечетно, потому что я не могу создать 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)

Я не уверен, как это расшифровать. Если я попробую

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

из отчаяния, я получаю еще более запутанную ошибку.

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

тоже не работает. Как-то это работает (но, видимо, использует небезопасную операцию):

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

Итак, я попробовал:

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

Но не повезло и там. Я очень смущен, повторяя одни и те же тики снова и снова в бесконечной петле, пытаясь понять это. Документация, которую я нашел, показывает примеры, которые не помогают, или нет примеров. Официальная документация также бесполезна:

  

Предположим, например, что у вас есть коллекция c, которая может   быть списком, набором или другим видом коллекции. Эта идиома создает   новый ArrayList (реализация интерфейса List), изначально   содержащий все элементы в c.

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

Итак, чтобы создать ArrayList , реализацию List , мне нужно иметь List . причина, по которой я пошел в документацию, заключалась в том, чтобы узнать, как сделать то, что они предполагают. Я потерялся. Помощь?

    
задан LilSweden 04.10.2014 в 19:23
источник

1 ответ

32

Используйте заводские методы в FXCollections :

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

Небезопасная операция в конструкторе блока выбора заключается в том, что вы не указали тип для поля выбора:

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

и ошибка из SortedList заключается в том, что конструктор не принимает никаких аргументов. (Опять же, обратитесь к javadocs .) Есть два конструкторы: простейшая ссылается на ObservableList (список, для которого отсортированный список предоставит отсортированное представление). Поэтому вам понадобится что-то вроде

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

или

SortedList<String> sortedList = new SortedList<>(FXCollections.observableArrayList());
    
ответ дан James_D 04.10.2014 в 19:34
источник
  • Я думал, что попробовал наблюдаемыйArrayList, но, видимо, нет. Благодаря! –  LilSweden 04.10.2014 в 19:37