3

在 scala.swing 中,我可以将组件添加到容器中,如下所示:

new Frame {
  contents += label
}

但有时我想清除容器的内容并用新组件替换它们。根据文档,我应该能够做到:

frame.contents.remove(0)

或者

frame.contents.clear

但这些都没有编译(“清除/删除不是 Seq[scala.swing.Component] 的成员”)。

我该如何解决这个问题?frame.contents += blah另外,初始化后似乎无法调用。如果是这样,我如何将新组件添加到容器中?

4

2 回答 2

2

如果是Frame具体说的话,只能添加一项​​,所以使用方法

def contents_= (c: Component) : Unit

你应该很好。在 REPL 中试试这个(一次一行,这样你就可以看到发生了什么):

import scala.swing._
val f = new Frame { contents = new Label("Hi") }
f.visible = true
f.contents = new Label("Hey there")

如果您正在使用旨在包含多个项目的东西,例如 a BoxPanel, contentsis aBuffer所以您可以添加到它并从中删除:

val bp = new BoxPanel(Orientation.Vertical)
val (label1,label2) = (new Label("Hi"), new Label("there"))
bp.contents += label1
bp.contents += label2
f.contents = bp    // Now you see "Hi" "there" stacked
bp.contents -= label1
f.pack             // "Hi" disappears--need pack not repaint to fix layout
bp.contents += label1
f.pack             // "Hi" is back, but at the end

如果您有其他类似 a 的东西Component正在扩展,那么您的工作就是contents用缓冲区覆盖或以其他方式修改它(或从SequentialContainerJ-16 所说的继承)。

于 2011-04-27T09:05:59.543 回答
0

contentsContainer是一个Seq[];你需要一个SequentialContainer删除方法。

于 2011-04-27T03:05:26.907 回答