3

scala.swingでは、次のようにコンポーネントをコンテナに追加できます。

new Frame {
  contents += label
}

しかし、コンテナの内容をクリアして、新しいコンポーネントと交換したい場合があります。ドキュメントに基づいて、私はできるはずです:

frame.contents.remove(0)

また

frame.contents.clear

しかし、どちらもコンパイルされません( "clear /removeはSeq[scala.swing.Component]のメンバーではありません")。

どうすればこれを解決できますか?また、初期化後は電話がかけられないようframe.contents += blahです。その場合、コンテナに新しいコンポーネントを追加するにはどうすればよいですか?

4

2 に答える 2

2

Frame具体的に言うと、追加できるアイテムは1つだけなので、メソッドを使用します

def contents_= (c: Component) : Unit

そしてあなたは良いはずです。これを REPL で試してください (何が起こっているかを確認できるように、一度に 1 行ずつ):

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

のように複数のアイテムを持つことを意図したものを使用している場合BoxPanelcontentsは である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拡張しているa のようなものがある場合はcontents、バッファーでオーバーライドするか、他の方法で変更する (またはSequentialContainerJ-16 が言ったように継承する) のがあなたの仕事です。

于 2011-04-27T09:05:59.543 に答える
0

contentsでしContainerSeq[]; SequentialContainerその remove メソッドが必要です。

于 2011-04-27T03:05:26.907 に答える