创建可观察列表/集合

Lil*_*den 29 java collections javafx interface list

我正在尝试ChoiceBox在JavaFX 8中创建一个需要的Collection.我无法弄清楚如何创建一个Collection...如果我尝试:

 ObservableList<String> list = new ObservableList<String>();
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说我无法实例化,ObservableList因为它是抽象的.可以理解的.如果我查看文档,ObservableList我可以看到SortedList implements ObservableList,但我不能这样做:

 ObservableList<String> list = new SortedList<String>();
Run Code Online (Sandbox Code Playgroud)

因为没有适用的构造函数.显然我需要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)
Run Code Online (Sandbox Code Playgroud)

我不知道如何解读.如果我试试

 ObservableList<String> list = new SortedList<SortedList<String>>();
 //or
 ObservableList<String> list = new SortedList<ObservableList<String>>();
Run Code Online (Sandbox Code Playgroud)

出于绝望,我得到了一个更复杂的错误.

    SortedList<String> list = new SortedList<String>();
Run Code Online (Sandbox Code Playgroud)

也不起作用.不知何故,这有效(但显然使用不安全的操作):

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

所以我尝试过:

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

但也没有运气.我非常困惑,在无休止的循环中一遍又一遍地尝试理解这一点.我发现的文档显示了没有帮助的示例,或者没有示例.官方文档也没用:

例如,假设您有一个Collection c,它可以是List,Set或其他类型的Collection.这个习惯用法创建一个新的ArrayList(List接口的一个实现),最初包含c中的所有元素.

 List<String> list = new ArrayList<String>(c);
Run Code Online (Sandbox Code Playgroud)

所以要创建ArrayList,实现List,我需要有一个List.我之前首先阅读文档的原因是为了学习如何制作我们所拥有的东西.我迷路了.救命?

Jam*_*s_D 49

使用工厂方法FXCollections:

ObservableList<String> list = FXCollections.observableArrayList();
Run Code Online (Sandbox Code Playgroud)

选择框构造函数中的不安全操作是因为您没有为选择框指定类型:

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

而错误SortedList是因为没有构造函数不带参数.(再次,请参阅javadoc.)有两个构造函数:最简单的构造函数引用一个ObservableList(排序列表将提供排序视图的列表).所以你需要类似的东西

SortedList<String> sortedList = new SortedList<>(list);
Run Code Online (Sandbox Code Playgroud)

要么

SortedList<String> sortedList = new SortedList<>(FXCollections.observableArrayList());
Run Code Online (Sandbox Code Playgroud)