3

我编写了以下简单代码来测试 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 的不可见标题是合理的?

4

2 回答 2

2

对斯卡拉一无所知。

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

于 2012-01-27T15:19:04.797 回答
0

Swing 最初是为 Java 编写的,它绝对没有惰性val。我敢打赌,如果你避免懒惰的 val,问题就会消失。如果 Scala 真的打算为 swing 库支持惰性 val,那么这可能是一个错误。

于 2012-01-27T14:52:45.777 回答