没有ScrollPane,表标题就会消失

时间:2012-01-27 03:52:12

标签: swing scala scala-swing

我编写了以下简单代码来测试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]?

2 个答案:

答案 0 :(得分:2)

对scala一无所知。

在底层的Swing中,原因是有两个不同的组件 - JTable和一个可选的JTableHeader。虽然标头配置为使用与表本身相同的TableColumnModel(加上一些连线),但只有当表包含在scrollPane中时,它才能由表管理组件层次结构的实际添加。如果它不在scrollPane中,则客户端代码负责将其插入最有意义的地方,f.i。在桌子上方的一个面板中。事实上,在这种情况下,桌子本身没有任何合理的做法,周围环境可能差别很大

答案 1 :(得分:0)

Swing最初是为Java编写的,它确实具有惰性值。我敢打赌,如果你避免懒惰,问题就会消失。如果Scala实际上打算支持swing库的lazy val,那么这可能是一个bug。