我正在构建一个具有可变数量和按钮配置的应用程序,该应用程序需要监听按钮单击事件并处理它们。
由于按钮数量和配置的要求,我觉得我必须在范围内调用listenTo
刚刚动态创建的按钮。BoxPanel
但是我发现按钮的事件不会被接收。
但是,如果我记得一个创建的按钮,并listenTo
在 的范围之外调用BoxPanel
,那么它的事件将被接收。
我想知道为什么listenTo
不在 BoxPanel 的范围内工作是怎么回事?无论如何,我没有看到这种用法的任何编译器错误。
下面是我的示例代码:
import scala.swing._
import scala.swing.event._
object TouchSelectUI extends SimpleSwingApplication {
val touchMap = Vector(
Vector("a", "b", "c"),
Vector("d", "e", "g")
// more may be defined in the future
)
val keyDemension = new Dimension(40, 25)
def top = new MainFrame {
title = "Touch Select Experiment"
val input = new TextArea {
columns = 80
text = ""
}
var aButtonRemebered = new Button()
contents = new FlowPanel {
require(touchMap.size > 0, {println("The touch key definition is empty!")})
for (c <- 0 until touchMap(0).size) {
contents += new BoxPanel(Orientation.Vertical) {
for (r <- 0 until touchMap.size) {
val key = new Button {
text = touchMap(r)(c)
}
contents += key
aButtonRemebered = key
listenTo(key) // listenTo here does not work.
}
}
}
contents += input
}
//listenTo(aButtonRemebered) // Here listTo would work to deliver the event to the following reaction!
reactions += {
case ButtonClicked(b) => {
println(s"Button clicked!")
val c = b.text
input.text = input.text + c
}
}
}
}
非常感谢你的帮助!
于