我的对话窗口包含文本字段和按钮。我想在每次单击按钮(*)时将一个任意字符串放在文本字段中。我面临的问题是如何通知文本字段发生了这样的事件?
我尝试在每次点击按钮时发布自定义消息,但我的文本字段似乎根本没有对此类消息作出反应,即使我已使用 listenTo 对其进行配置。
这是一个(非)工作的最小例子,描述了我到目前为止的不成功的斗争:
import swing._
import swing.event._
case class SomethingHappened extends Event {
println("Yes, something indeed has been published!")
}
class MyDialog extends Dialog {
contents = new BoxPanel(Orientation.Vertical) {
val myButton = Button("Click me and something will happen!") {
publish(SomethingHappened())
}
contents += new TextField {
listenTo(myButton)
reactions += {
case SomethingHappened() =>
// This actually never happens... :(
peer.setText("Voilà!")
println("You didn't expect it coming, did you?")
}
}
contents += myButton
}
open()
}
new MyDialog()
在这里非常感谢你的帮助。谢谢!
(*)“按钮点击”是一个占位符,用于更复杂的事件,此处仅用于简化目的(假设 ButtonClicked 不是我想要的,我需要定义并发布真正的自定义事件)。另一方面,更新文本字段内容仍然是“点击”的期望结果。
答案 0 :(得分:0)
尝试publish
上的myButton
:
val myButton: Button = Button("Click me and something will happen!") {
println(this)
myButton.publish(SomethingHappened())
}
在这种情况下, this
引用BoxPanel
:该块不是Button
类的方法,它作为参数传递给它。