可编辑的ComboBox:getValue()存在问题

3

我对getValue()的实际返回值感到困惑,或者更准确地说:Eclipse似乎有这个问题。这是我的ComboBox:

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

我通过以下方式将ComboBox填充为来自intList的整数:

intBox.getItems().addAll(intList);

我也通过 setEditable(true)ComboBox 设置为可编辑。

问题是,如果我尝试将 intBox.getValue() 的值存储在 Integerint 变量中,在运行时会出现 "java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer" 错误。但如果我尝试将其存储到一个 String 中,Eclipse 给出了编译错误:"Type mismatch: cannot convert from Integer to String"。所以编译器告诉我它是一个整数,但我仍然无法将其存储在整数中,为什么呢?

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

1个回答

4
根据文档
由于ComboBox可以编辑,而允许用户输入的默认方式是通过TextField,因此提供了一个字符串转换器属性,以允许开发人员指定如何将用户的字符串转换为类型T的对象,以便值属性可以包含它。默认情况下,转换器只是将String输入作为用户键入的内容返回,因此假设可编辑ComboBox的类型为String。如果指定了不同的类型并且ComboBox可编辑,则需要指定自定义StringConverter。
基本上,如果ComboBox是可编辑的,则它将从编辑器(即TextField)获取其值,该编辑器提供一个字符串。如果您有一个类型不是String的可编辑组合框,则需要提供一种将文本字段中的字符串转换为适当类型值的方法,反之亦然。因此,您需要:
intBox.setConverter(new IntegerStringConverter());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接