可编辑的ComboBox:getValue()

时间:2015-07-01 07:32:48

标签: types combobox casting javafx

我遇到了getValue()实际返回的问题,或者更确切地说:Eclipse似乎有这个问题。这是我的ComboBox:

ComboBox<Integer> intBox = new ComboBox<Integer>;
ObservableList<Integer> intList = FXCollections.observableArrayList();

我通过以下操作填充ComboBox来自intList的整数:

intBox.getItems().addAll(intList);

我还通过ComboBoxsetEditable(true)设置为可编辑。

问题是,如果我尝试将intBox.getValue()的值存储在Integerint变量中,我会得到“java.lang.ClassCastException:java.lang.String不能在运行时“转换为java.lang.Integer”。但是如果我尝试将它存储到String中,Eclipse会给我编译错误:“类型不匹配:无法从Integer转换      to String“。所以编译器告诉我它是一个Integer,但我仍然无法将它存储在Integer中,为什么?

我还尝试了各种变通办法,例如Integer.parseIntgetValue().intValue()Integer.toString(),并将这些值存储在不同数据类型的各种变量中,但它们都给了我相同的功能或类似的错误。

1 个答案:

答案 0 :(得分:3)

来自documentation

  

因为ComboBox可以编辑,并且默认允许   用户输入是通过TextField,提供字符串转换器属性   允许开发人员指定如何翻译用户字符串   到类型为T的对象,以便value属性可以包含它。   默认情况下,转换器只是以用户身份返回String输入   键入它,因此假定可编辑的类型   ComboBox是String。如果指定了其他类型和ComboBox   是可编辑的,有必要指定一个自定义   字符串转换。

基本上,如果ComboBox是可编辑的,它将从编辑器(TextField)获取其值,该编辑器提供String。如果您有一个类型不是String的可编辑组合框,则需要提供一种方法将字符串从文本字段转换为适当类型的值,反之亦然。所以你需要

intBox.setConverter(new IntegerStringConverter());