gpt4 book ai didi

scala - 如何在 ScalaFX 中正确声明属性更改监听器?

转载 作者:行者123 更新时间:2023-12-02 04:30:25 24 4
gpt4 key购买 nike

使用 this code作为示例,我编写了以下代码来跟踪 slider 的变化并将结果放入“speed: Int”变量中:

speedSlider.valueProperty.addListener(new ChangeListener[Number] {
@Override
def changed(o: ObservableValue[_ <: Number], oldVal: Number, newVal: Number) {
speed = newVal.intValue()
}
})

但它会导致错误:

wrong number of type arguments for scalafx.beans.value.ObservableValue, should be 2
def changed(o: ObservableValue[_ <: Number], oldVal: Number, newVal: Number) {

如果我改变 ObservableValue[_ <: Number]ObservableValue[_ <: Number, _ <: Number]此错误消失,但出现另一个错误:

object creation impossible, since method changed in trait ChangeListener of type (x$1: javafx.beans.value.ObservableValue[_ <: Number], x$2: Number, x$3: Number)Unit is not defined
speedSlider.valueProperty.addListener(new ChangeListener[Number] {
^

有什么想法吗?

更新:我已经通过替换 ObservableValue 解决了错误(正在被解析为我不太了解的 ScalaFX 版本)与 javafx.beans.value.ObservableValue .它现在可以编译并且不会抛出任何错误,但仍然无法正常工作 - 代码从未被调用。

最佳答案

查看 docs我看到您不需要传递 ChangeListener,只需传递一个与 onChange 方法具有相同签名的匿名函数

speedSlider.valueProperty.addListener{ (o: javafx.beans.value.ObservableValue[_ <: Number], oldVal: Number, newVal: Number) =>
speed = newVal.intValue
}

否则该方法将需要一个 javafx.beans.value.ChangeListener

我希望这能解决问题。

关于scala - 如何在 ScalaFX 中正确声明属性更改监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23431936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com