JavaFX: сообщение об ошибке с ChangeListener

Пока я кодировал, я добавил следующий фрагмент кода:

nameComboBox.valueProperty().addListener(new ChangeListener<NameVO>() {

        @Override
        public void changed(
                ObservableValue<? extends NameVO> observable,
                NameVO oldValue, NameVO newValue) {
            // TODO Auto-generated method stub

        }
    });


И Eclipse показывает мне красную линию под addListener и наводит указатель мыши на то, что я вижу следующее сообщение:

The method addListener(ChangeListener<? super capture#6-of ?>) in the type ObservableValue<capture#6-of ?> is not applicable for the arguments (new ChangeListener<NameVO>(){})

С чего бы это из-за?

[Примечание: я сделал то же самое для оставшихся ComboBox, но я не получаю там такого сообщения]


person Vikram    schedule 27.08.2013    source источник


Ответы (3)


Похоже, ожидается ObservableValue<NameVO>, а не ObservableValue<? extends NameVO>.

Для начала посмотрите, как вы явно указываете аргумент типа для вашего ChangeListener:

new ChangeListener<NameVO>{ .... }

Вы явно указываете, что это NameVO, но когда вы фактически переходите к реализации метода, вы меняете его на ? extends NameVO

person Josh M    schedule 27.08.2013
comment
Спасибо за ответ. Я уже пробовал это. Это дает мне другое сообщение об ошибке, если я пытаюсь это сделать: The method changed(ObservableValue<NameVO>, NameVO, NameVO) of type new ChangeListener<NameVO>(){} must override or implement a supertype method - person Vikram; 28.08.2013

Получил решение!

Для всех других ComboBox объявление включало соответствующий объект значения.

Например:

@FXML //  fx:id="projectComboBox"
private ComboBox<ProjectVO> projectComboBox; // Value injected by FXMLLoader

Но nameComboBox было просто объявлено как:

@FXML //  fx:id="nameComboBox"
private ComboBox<?> nameComboBox; // Value injected by FXMLLoader

Добавил NameVO на место ? и избавился от проблемы.

person Vikram    schedule 28.08.2013

Ответ прост, просто добавьте ниже в ваш импорт

import javafx.scene.control.Toggle;
person Tohir    schedule 17.10.2017
comment
Нет почему? как это поможет? - person kleopatra; 17.10.2017