[英]JavaFX: Error message with 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,我也做了类似的事情,但是那边我没有得到这样的消息]
似乎期望使用ObservableValue<NameVO>
而不是ObservableValue<? extends NameVO>
ObservableValue<? extends NameVO>
。
首先,请查看如何显式说明ChangeListener
的type参数:
new ChangeListener<NameVO>{ .... }
您明确声明它是NameVO
但是当您实际实现该方法时,您将其更改为? extends NameVO
? extends NameVO
得到了解决方案!
对于所有其他ComboBox,声明涉及各自的value对象。
例如:
@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
?
并摆脱了这个问题。
答案很简单,只需将以下内容添加到您的导入中
import javafx.scene.control.Toggle;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.