在scala.swing中,如何从Container中删除组件?

时间:2011-04-27 02:39:32

标签: swing scala scala-swing

在scala.swing中,我可以像这样在容器中添加一个组件:

new Frame {
  contents += label
}

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

frame.contents.remove(0)

frame.contents.clear

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

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

2 个答案:

答案 0 :(得分: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")

如果您使用的内容包含BoxPanel之类的多个项目,则contentsBuffer,以便您可以添加并删除它:

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

如果您正在扩展其他类似Component的内容,那么您可以使用缓冲区覆盖contents或使用其他方式对其进行修改(或继承自{{1}正如J-16所说。)

答案 1 :(得分:0)

contents中的

ContainerSeq[]; 你需要一个SequentialContainer的删除方法。