Scala/Swing を使用してテーブルを作成しようとしていますが、その列の 1 つにButton
s が入力されています。
私の出発点は、 Odersky et al's bookのSCells スプレッドシートの例であり、特に を使用して各セルの表示を制御します。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
}
}
これを実行すると、2 つの列を持つテーブルが得られます。1 番目にはラベルが含まれ、2 番目にはボタンが含まれますが、ボタンはクリックできません。
おそらく関連する問題: セル (ボタンを含むものを含む) は編集可能です。編集を無効にする最良の方法は何ですか?
私はthis question (およびthis one ) を見て、( を使用して) そこでアプローチを試みましたTable.AbstractRenderer
が、それも機能していません。そのバージョンでボタンのクリックに対する反応をどこに置くべきかはまったくわかりません。(そのアプローチは時代遅れですか? それとも、Scala ブックのアプローチは単純すぎますか?)
アドバイスをありがとう!