我无法将以下Swing表视图排序。虽然我确实在列标题翻转时得到了小三角形,但根据排序状态,表格内容的刷新方式不同:
import scala.swing._
val data = Array(
Array("a", 4, 8.9),
Array("b", 7, 2.3),
Array("c", 1, 5.6)
).map(_.map(_.asInstanceOf[AnyRef]))
val m = new javax.swing.table.DefaultTableModel(data,
Array[AnyRef]("string", "int", "double")) {
override def getColumnClass(c: Int): Class[_] = c match {
case 0 => classOf[java.lang.String ]
case 1 => classOf[java.lang.Integer]
case 2 => classOf[java.lang.Double ]
}
}
val t = new Table
t.model = m
t.peer.setAutoCreateRowSorter(true)
new Frame {
contents = new ScrollPane(t)
pack().centerOnScreen()
open()
}
我用不同的外观(屏幕截图显示Nimbus)和JDK(OpenJDK 6,OpenJDK 7)对此进行了测试。此外,我有一个自定义树表组件,可以毫无问题地进行排序,因此错误必须位于上方。
答案 0 :(得分:5)
这是Scala-Swing中的一些错误。为什么我不感到惊讶?!
import scala.swing._
type I = java.lang.Integer
type D = java.lang.Double
val data = Array[Array[Object]](
Array("a", 4:I, 8.9:D),
Array("b", 7:I, 2.3:D),
Array("c", 1:I, 5.6:D)
)
val m = new javax.swing.table.DefaultTableModel(data,
Array[AnyRef]("string", "int", "double")) {
override def getColumnClass(c: Int): Class[_] = data(0)(c).getClass
}
val tj = new javax.swing.JTable(m) // !!!
tj.setAutoCreateRowSorter(true)
val t = Component.wrap(tj) // !!!
new Frame {
contents = new ScrollPane(t)
pack().centerOnScreen()
open()
}
它可能是this bug虽然标题说列排序受到影响(文本建议提交者正在讨论行排序)。我的猜测是渲染器包装在viewToModel
/ modelToView
方面被打破。
修改:已确认。所需要的只是
val t = new Table {
// disable broken renderer
override lazy val peer: JTable = new JTable with SuperMixin
}