我遇到了getValue()
实际返回的问题,或者更确切地说:Eclipse似乎有这个问题。这是我的ComboBox:
ComboBox<Integer> intBox = new ComboBox<Integer>;
ObservableList<Integer> intList = FXCollections.observableArrayList();
我通过以下操作填充ComboBox
来自intList
的整数:
intBox.getItems().addAll(intList);
我还通过ComboBox
将setEditable(true)
设置为可编辑。
问题是,如果我尝试将intBox.getValue()
的值存储在Integer
或int
变量中,我会得到“java.lang.ClassCastException:java.lang.String不能在运行时“转换为java.lang.Integer”。但是如果我尝试将它存储到String
中,Eclipse会给我编译错误:“类型不匹配:无法从Integer转换
to String“。所以编译器告诉我它是一个Integer,但我仍然无法将它存储在Integer中,为什么?
我还尝试了各种变通办法,例如Integer.parseInt
,getValue().intValue()
和Integer.toString()
,并将这些值存储在不同数据类型的各种变量中,但它们都给了我相同的功能或类似的错误。
答案 0 :(得分:3)
因为ComboBox可以编辑,并且默认允许 用户输入是通过TextField,提供字符串转换器属性 允许开发人员指定如何翻译用户字符串 到类型为T的对象,以便value属性可以包含它。 默认情况下,转换器只是以用户身份返回String输入 键入它,因此假定可编辑的类型 ComboBox是String。如果指定了其他类型和ComboBox 是可编辑的,有必要指定一个自定义 字符串转换。
基本上,如果ComboBox
是可编辑的,它将从编辑器(TextField
)获取其值,该编辑器提供String
。如果您有一个类型不是String
的可编辑组合框,则需要提供一种方法将字符串从文本字段转换为适当类型的值,反之亦然。所以你需要
intBox.setConverter(new IntegerStringConverter());