我从 Scala 和 ScalaFX 开始,我了解大部分代码,但我不了解用于 ScalaFx 示例的代码;
在哪里实例化一个匿名类,后面是花括号,这是如何工作的???
object ScalaFXHelloWorld extends JFXApp {
stage = new PrimaryStage {
title = "ScalaFX Hello World"
scene = new Scene {
fill = Black
content = new HBox {
padding = Insets(20)
children = Seq(
new Text {
text = "Hello"
style = "-fx-font-size: 48pt"
fill = new LinearGradient(
endX = 0,
stops = Stops(PaleGreen, SeaGreen)
)
},
new Text {
text = "World!!!"
style = "-fx-font-size: 48pt"
fill = new LinearGradient(
endX = 0,
stops = Stops(Cyan, DodgerBlue)
)
effect = new DropShadow {
color = DodgerBlue
radius = 25
spread = 0.25
}
}
)
}
}
}
}
我不明白的部分是为什么在创建匿名类时要跟着花括号(还有更多声明)(场景不是填充该类的抽象部分的线索),甚至填充或内容都是函数不是变量,Black for fill for instant 是 val 意味着这条线
fill = Black
正在调用一个函数填充并为其分配一个 val(对我来说没有意义),这是填充定义
def fill: ObjectProperty[jfxsp.Paint] = delegate.fillProperty
这是黑色
val Black = new Color(jfxsp.Color.BLACK)
这个带花括号的新对象的实例化是如何工作的,请帮助,想了解。这是因为 ScalaFx 正在包装 JavaFx 并且这里发生了一些特别的事情?感谢你们。
更新:
好吧,现在我知道它正在通过语法糖调用一个 setter,但是我检查了那个 setter,但我不明白那里发生了什么
一探究竟:
def fill: ObjectProperty[jfxsp.Paint] = delegate.fillProperty
def fill_=(v: Paint) {
fill() = v
}
为什么 setter 调用 getter 来更新值?
委托.fillProperty
是一个返回值的函数