在scala.swing中,我可以像这样在容器中添加一个组件:
new Frame {
contents += label
}
但有时我想清除容器的内容并用新组件替换它们。根据文档,我应能够做到:
frame.contents.remove(0)
或
frame.contents.clear
但这些都没有编译(“清除/删除不是Seq [scala.swing.Component]的成员”)。
我该如何解决这个问题?此外,似乎我无法在初始化后调用frame.contents += blah
。如果是这样,我如何将新组件添加到Container?
答案 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
之类的多个项目,则contents
为Buffer
,以便您可以添加并删除它:
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
中的 Container
是Seq[]
;
你需要一个SequentialContainer
的删除方法。