2015-07-01 3 views
2

У меня возникают проблемы, обертывающие мою голову вокруг того, что действительно возвращает getValue(): вернее, у Eclipse есть эта проблема. Это мой ComboBox:Редактируемый ComboBox: проблемы с getValue()

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 в String». Поэтому компилятор сообщает мне свой Integer, но я все еще не могу хранить это в Integer, почему?

Я также пробовал различные обходные пути, как Integer.parseInt, getValue().intValue() и Integer.toString() и хранить эти значения в различных переменных различных ДАТ атипы, но все они дали мне те же или подобные ошибки.

ответ

3

От documentation:

Because a ComboBox can be editable, and the default means of allowing user input is via a TextField, a string converter property is provided to allow for developers to specify how to translate a users string into an object of type T, such that the value property may contain it. By default the converter simply returns the String input as the user typed it, which therefore assumes that the type of the editable ComboBox is String. If a different type is specified and the ComboBox is to be editable, it is necessary to specify a custom StringConverter.

В принципе, если ComboBox редактируется, он получит свое значение из редактора (а TextField), который поставляет String. Если у вас есть редактируемое поле со списком, тип которого не равен String, вам необходимо предоставить способ преобразования строки из текстового поля в значение соответствующего типа и наоборот. Так вам нужно

intBox.setConverter(new IntegerStringConverter()); 
Смежные вопросы