2012-01-27 97 views
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的无形标头[s]?

+0

不“不影响” 但“不应该影响” – 2012-01-27 03:56:56

+0

也许相关:http://stackoverflow.com/q/8043669/770361 – 2012-01-27 04:13:37

+0

还有Swing?远远... – Janx 2012-01-27 04:28:10

回答

0

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

+0

我不认为这与懒惰的vals有什么关系。 – 2012-01-28 00:30:46

2

对scala不了解。

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