Как удалить компонент из контейнера в scala.swing? - PullRequest
1 голос
/ 27 апреля 2011

В scala.swing я могу добавить компонент к контейнеру следующим образом:

new Frame {
  contents += label
}

, но иногда я хотел бы очистить содержимое контейнера и заменить его новыми компонентами.Исходя из документов, я должен быть в состоянии сделать:

frame.contents.remove(0)

или

frame.contents.clear

, но ни одна из этих компиляций («очистить / удалить нечлен Seq [scala.swing.Component] ").

Как я могу решить эту проблему?Кроме того, кажется, что я не могу позвонить frame.contents += blah после инициализации.Если это так, как добавить новый компонент в контейнер?

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Если вы говорите конкретно о 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).

0 голосов
/ 27 апреля 2011

contents в Container было Seq[];вам нужен SequentialContainer для этого метода удаления.

...