【发布时间】:2011-12-26 12:22:41
【问题描述】:
我正在尝试使用 Scala/Swing 创建一个表,其中一个列由 Buttons 填充。
我的出发点是来自 Odersky 等人的book 的SCells spreadsheet example,尤其是使用rendererComponent 来控制出现在每个单元格中的Component。
不幸的是,虽然这会成功创建一个按钮,但该按钮是不可点击的。这是一个相当简单且独立的示例:
import swing._
import swing.event._
class TableButtons extends ScrollPane {
viewportView = new Table(2,2) {
rowHeight = 25
override def rendererComponent(isSelected: Boolean, hasFocus: Boolean,
row: Int, column: Int): Component =
if (column == 0) {
new Label("Hello")
} else {
val b = new Button { text = "Click" }
listenTo(b)
reactions += {
case ButtonClicked(`b`) => println("Clicked")
}
b
}
}
}
object Main extends SimpleSwingApplication {
def top = new MainFrame {
title = "Table button test"
contents = new TableButtons
}
}
当我运行它时,我得到一个包含两列的表格;第一个包含标签,第二个包含按钮,但按钮不可点击。
可能相关的问题:单元格(包括包含按钮的单元格)是可编辑的。禁用编辑的最佳方法是什么?
我见过this question(和this one),并尝试按照那里的方法(使用Table.AbstractRenderer),但这也行不通——而且对我来说,在哪里对按钮点击做出反应并不明显在那个版本中。 (这种方法过时了吗?还是 Scala 书中的方法过于简单?)
感谢您的建议!
【问题讨论】:
标签: swing scala button renderer