创建可观察列表/集合

2022-09-01 03:47:54

我正在尝试在JavaFX 8中创建一个,这需要一个.我不知道如何创建一个虽然...如果我尝试:ChoiceBoxCollectionCollection

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

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

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

因为没有适用的构造函数。显然,我需要有一个传递给 ,这很奇怪,因为我无法创建一个.ObservableListSortedListObservableList

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);

所以要创建,一个实现,我需要有一个。我最初去文档的原因是学习如何制作他们假设我拥有的东西。我迷路了。帮助?ArrayListListList


答案 1

使用 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"));

而 from 的错误是因为没有构造函数不带任何参数。(再次,参考javadocs。有两个构造函数:最简单的一个构造函数采用对 an(排序列表将为其提供排序视图的列表)的引用。所以你需要这样的东西SortedListObservableList

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

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

答案 2