Если вы говорите конкретно о 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
с буфером или каким-либо другим способом его изменить (или наследовать от SequentialContainer
, как сказал J-16).