私はScala/Swingを使用してテーブルを作成しようとしています。テーブルの1つにButton
が設定されています。Scalaのスイングテーブルに(作業中の)ボタンを埋め込む方法は?
私の出発点は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
}
}
私はこれを実行すると、2つの列を持つテーブルを取得します。最初のラベルにはラベルが含まれ、2番目のラベルにはボタンが含まれますが、ボタンはクリックできません。
おそらく関連する問題:セル(ボタンを含むものを含む)が編集可能です。編集を無効にする最良の方法は何ですか?
私はthis question(およびthis oneを)見てきましたし、(Table.AbstractRenderer
を使用して)そこにアプローチし、次の試してみましたが、それも働いていない - とそのバージョンで、ボタンのクリックに反応を配置する場所、それがすべてで明らかに私にはありません。 (このアプローチは時代遅れですか?またはScalaの本からのアプローチが単純すぎるのでしょうか)
ありがとうございました!
ありがとうございます!私のテーブルにはいくつかの行しかないので、multipラベルやボタンは問題にならないはずですが、このようにするのはいいことです。私はチュートリアルも見ていきます。乾杯! – gimboland
私は '' editor''の代わりに 'table.peer.setDefaultEditor'を使うべきだと思います。 –