我想用Scala/Swing來創建一個表,其中一列由Button
s填充。如何在斯卡拉的Swing Table中嵌入(工作)按鈕?
我的出發點是從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書的方法太簡單?)
感謝您的任何建議!
謝謝!我的表格只會有幾行,所以性能受到影響標籤/按鈕不應該是一個問題,但很高興看到這樣做。我也會看看這個教程。乾杯! – gimboland 2012-01-03 15:29:53
我認爲它應該使用'table.peer.setDefaultEditor'而不是覆蓋'編輯器'。 – 2017-10-11 03:19:04