【发布时间】:2015-05-07 08:31:05
【问题描述】:
我从 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
}
}
)
}
}
}
}
我不明白的部分是为什么在创建匿名类时后面跟着花括号(还有一些声明)(场景不是填充该类的抽象部分的线索)甚至填充或内容是函数而不是变量,即时填充的黑色是 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 来更新值?
delegate.fillProperty
是一个返回值的函数
【问题讨论】: