Подтвердить что ты не робот

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

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

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

Я получаю сообщение об ошибке: я не могу создать экземпляр ObservableList, потому что он абстрактный. Понятный. Если я посмотрю на документ для ObservableList, я вижу, что SortedList реализует 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. причина, по которой я пошел в документацию, заключалась в том, чтобы узнать, как сделать то, что они предполагают. Я потерялся. Помощь?

4b9b3361

Ответ 1

Используйте методы factory в 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());