Похоже, что Scala Swing пока не поддерживает события заголовка таблицы, поэтому вам, возможно, придется сделать что-то вроде следующего, которое добавляет слушателя мыши непосредственно к JTableHeader .
Я уверен, что существует элегантный способ создания scala.swing.Publisher для интеграции слушателя с реакциями listenTo и механизм, это просто зависит, если оно того стоит.
import java.awt.Dimension
import java.awt.event.{MouseEvent, MouseAdapter}
import swing._
import event.TableColumnsSelected
object TableQuestion extends SimpleSwingApplication {
val headers = Array.tabulate(10){"Col-"+_}.toSeq
val rowData = Array.tabulate[Any](10, 10){""+_+":"+_}
lazy val ui = new BoxPanel(Orientation.Vertical) {
val table = new Table(rowData, headers)
val label = new Label("")
val header = table.peer.getTableHeader()
header.addMouseListener(new MouseAdapter() {
override def mouseClicked(e: MouseEvent) {
val col = header.columnAtPoint(e.getPoint())
label.text = "Column header "+col+" selected"
}
})
listenTo(table.selection)
reactions += {
case TableColumnsSelected(_, r, _) =>
label.text = "Column "+table.selection.columns.leadIndex+" selected, range = "+r
}
contents += new ScrollPane(table)
contents += label
}
def top = new MainFrame {
title = "Table Column Selection"
preferredSize = new Dimension(400, 260)
contents = ui
}
}
Кроме того, информация о диапазоне, предоставляемая событием TableColumnSelected, довольно странная, она содержит непрерывные индексы столбцов от текущего клика до предыдущего клика вдругой столбец.Возможно, я чего-то не понимаю, почему.