通过FXML通过FXCollections创建集合

时间:2019-08-03 11:40:37

标签: java javafx fxml

有数十个示例,这些示例是通过FXCollections从FXML创建集合的(例如here):

<FXCollections fx:factory="observableArrayList">
    <String fx:value="A"/>
    <String fx:value="B"/>
    <String fx:value="C"/>
</FXCollections>

但是我不明白它是如何工作的。毕竟,工厂方法是 no-arg 方法,所以String元素在哪里?我以为这是默认属性,但是FXCollections没有默认属性。 observableArrayList()工厂方法的重载版本在文档和源代码中采用了集合元素的变量。但是,为什么FXML使用此方法?它没有在文档中指定(或者我找不到)。我在文档中找到的全部是:

  

fx:factory属性是创建其类没有默认构造函数的对象的另一种方法。该属性的值是用于生成类实例的静态,无参数工厂方法的名称。例如,以下标记创建了一个可观察到的数组列表的实例,并填充了三个字符串值:

我觉得这是愚蠢的问题。但是谁能对我说清楚?

提前谢谢

P.S。对不起,我的英语

1 个答案:

答案 0 :(得分:2)

  

observableArrayList()工厂方法的重载版本在文档和源代码中采用了集合元素的vararg。但是,为什么FXML使用此方法?

不是。 FXCollections.observableArrayList()用于创建列表,并且由于<String>元素周围的元素是List,因此将这些元素添加到列表中。产生相同结果的Java代码将是

ObservableList list = FXCollections.observableArrayList();
list.add("A");
list.add("B");
list.add("C");

即使文档中没有明确声明,也以与read-only list properties相同的方式对待列表。