向ChoiceBox添加项目<! - ? - >

时间:2013-06-17 10:31:05

标签: java javafx-2

在班级DataConstantsNames

我有:

public static final ObservableList<Object> IMPORTVARIABLES = FXCollections.observableArrayList(DATE, TIME, new Separator(),OPEN, HIGH, LOW, CLOSE, new Separator(),VOLUME);

我想将这些变量添加到类控制器中的choiceBox,其中我有7个选择框:

ChoiceBox[] columnName = {choiceboxColumn1, choiceboxColumn2, choiceboxColumn3, choiceboxColumn4, choiceboxColumn5, choiceboxColumn6, choiceboxColumn7};

我的问题:如果我执行for循环,例如:

for (int i = 0; i < columnName.length; i++) {
    columnName[i].setItems(DataConstantsName.IMPORTVARIABLES);
}

一切都很好,但如果我尝试将项目设置为单个choiceBox,我会收到此错误:

enter image description here

我哪里错了?

1 个答案:

答案 0 :(得分:2)

我不知道为什么SB使用通配符(<?>)生成你的ChoiceBox,但你不能在没有类型规范的通配列表中设置项目。

有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html

要使代码可编辑,请从ChoiceBoxes中删除通配符:

@FXML private ChoiceBox choiceboxColumn1;

或将变量转换为特定类型:

((ChoiceBox)choiceboxColumn1).setItems(IMPORTVARIABLES);

((ChoiceBox<Object>)choiceboxColumn1).setItems(IMPORTVARIABLES);

P.S。: for循环适合您,因为您将choiceboxColumn1放入普通ChoiceBox数组中。通过这个你告诉编译器忽略所有泛型并使用旧的java 1.4样式中的变量。

您可以使用直接设置来实现:

ChoiceBox cb = choiceboxColumn1;
cb.setItems(IMPORTVARIABLES);

由于Java类型擦除概念,您可以这样做:http://docs.oracle.com/javase/tutorial/java/generics/erasure.html