我编写了以下简单代码来测试scala.swing.Table:
// java version "1.7.0_01"
// Scala code runner version 2.9.1.final
// Windows 7 Ultimate 64-bit
import scala.swing._
object TableHeaderVisible extends SimpleSwingApplication {
override def top = new MainFrame {
preferredSize = new Dimension(300, 200)
// contents = new ScrollPane(table)
contents = table
}
lazy val table = new Table(model, Seq("fruit", "animal")) // with Scrollable
lazy val model = Array(
Array("orange", "dog"),
Array("apple", "cat")).asInstanceOf[Array[Array[Any]]]
}
这不会产生表格标题,“水果”和“动物”。
为什么?
我可以用
做到这一点contents = new ScrollPane(table)
不
contents = table.
但是,不管是否使用ScrollPane
都不应该影响表头是否可见,我想。
我的代码中是否有错误的代码?还是在scala.swing._
图书馆?
或者有没有理由在没有ScrollPane的情况下证明不可见的标题[s]?
答案 0 :(得分:2)
对scala一无所知。
在底层的Swing中,原因是有两个不同的组件 - JTable和一个可选的JTableHeader。虽然标头配置为使用与表本身相同的TableColumnModel(加上一些连线),但只有当表包含在scrollPane中时,它才能由表管理组件层次结构的实际添加。如果它不在scrollPane中,则客户端代码负责将其插入最有意义的地方,f.i。在桌子上方的一个面板中。事实上,在这种情况下,桌子本身没有任何合理的做法,周围环境可能差别很大
答案 1 :(得分:0)
Swing最初是为Java编写的,它确实不具有惰性值。我敢打赌,如果你避免懒惰,问题就会消失。如果Scala实际上打算支持swing库的lazy val,那么这可能是一个bug。