【问题标题】:Creating an Observable List/Collection创建一个可观察的列表/集合
【发布时间】:2014-11-29 11:22:27
【问题描述】:

我正在尝试在 JavaFX 8 中创建 ChoiceBox,这需要 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,它可能 可以是 List、Set 或其他类型的 Collection。这个成语创造了一个 最初是新的 ArrayList(List 接口的实现) 包含c中的所有元素。

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

所以要创建ArrayList,实现List,我需要有一个List。我首先去看文档的原因是学习如何制作他们假设我拥有的东西。我迷路了。帮忙?

【问题讨论】:

    标签: java list collections interface javafx


    【解决方案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"));
    

    SortedList 的错误是因为没有构造函数不带参数。 (同样,参考javadocs。)有两个构造函数:最简单的一个引用ObservableList(排序列表将为其提供排序视图的列表)。所以你需要类似的东西

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

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

    【讨论】:

    • 我以为我尝试过 observableArrayList,但显然没有。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多