JavaFX:ChangeListener的错误消息

时间:2013-08-27 23:50:04

标签: java combobox 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>(){})

为什么会因为?

[注意:我为剩下的ComboBoxes做了类似的事情,但我没有收到这样的消息]

3 个答案:

答案 0 :(得分:0)

似乎期待ObservableValue<NameVO>而不是ObservableValue<? extends NameVO>

首先,请看一下如何明确说明ChangeListener的类型参数:

new ChangeListener<NameVO>{ .... }

您明确声明它是NameVO但是当您真正去实施该方法时,您将其更改为? extends NameVO

答案 1 :(得分: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的地方添加了?并解决了问题。

答案 2 :(得分:-1)

答案很简单,只需将以下内容添加到导入

即可
import javafx.scene.control.Toggle;