我正在尝试ChoiceBox在JavaFX 8中创建一个,需要一个Collection。我不知道如何创建一个Collection……但是,如果我尝试:
ChoiceBox
Collection
ObservableList<String> list = new ObservableList<String>();
我收到一个错误消息,说它无法实例化,ObservableList因为它是抽象的。可以理解的 如果我查看该文档,ObservableList可以看到SortedList implements ObservableList,但是我做不到:
ObservableList
SortedList implements ObservableList
ObservableList<String> list = new SortedList<String>();
因为没有适用的构造函数。显然我需要ObservableList传递给SortedList,这很奇怪,因为我无法创建ObservableList。
SortedList
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");
但是那里也没有运气。我非常困惑,一遍又一遍地试图理解这一点,反复地做着同样的事情。我找到的文档显示了无济于事的示例,或者没有示例。官方文档也没有用:
例如,假设您有一个Collection c,它可以是List,Set或另一种Collection。这个习惯用法创建了一个新的ArrayList(List接口的实现),最初包含c中的所有元素。 List<String> list = new ArrayList<String>(c);
例如,假设您有一个Collection c,它可以是List,Set或另一种Collection。这个习惯用法创建了一个新的ArrayList(List接口的实现),最初包含c中的所有元素。
List<String> list = new ArrayList<String>(c);
所以要创建ArrayList一个实现List,我需要一个List。我首先去看文档的原因是要学习如何使他们假设我拥有的东西。我迷路了。救命?
ArrayList
List
在以下位置使用工厂方法FXCollections:
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());