2013-08-27 4 views
1

В то время как я кодирования, я добавил следующий фрагмент кода: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 

     } 
    }); 


И затмение показывает мне красную линию под 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>(){})

Почему бы это быть из-за?

[Примечание: Я сделал подобную вещь для остальных ComboBoxes, но я не подвожу не такое сообщение там]

ответ

0

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

Для всех других 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 на месте ? и избавились от этой проблемы.

0

Похоже, что ожидает ObservableValue<NameVO> в отличие от ObservableValue<? extends NameVO>.

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

new ChangeListener<NameVO>{ .... }

Вы явно о том, что это NameVO, но когда вы на самом деле пойти реализовать метод, вы меняют его на ? extends NameVO

+0

Спасибо за ответ. Я уже пробовал это. Это дает мне еще одно сообщение об ошибке, если я попытаюсь это сделать: «Метод изменен (ObservableValue , NameVO, NameVO) типа new ChangeListener () {} должен переопределить или реализовать метод супертипа' – Vikram

+0

. Какая новая ошибка? –

-1

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

import javafx.scene.control.Toggle; 
+0

Нет - почему? как это поможет? – kleopatra

Смежные вопросы