在Swing中更改BoxPanel的内容

时间:2014-06-29 08:57:54

标签: swing scala

我正在尝试从Scala-Swing中label的{​​{1}}中删除contents但我收到以下错误。

BoxPanel

我查了一下,发现它是value contents is not a member of Seq[scala.swing.Component] contents.contents -= label //Problem here ^ 的成员。现在我不确定这里出了什么问题。

scala.Seq

我的代码如下。

def contents : scala.Seq[scala.swing.Component] = { /* compiled code */ }

1 个答案:

答案 0 :(得分:1)

问题是您尝试通过类型为BoxPanel的框架的通用contents方法访问Seq[Component],而框面板实际上实现了SequentialContainer接口允许其内容的突变。

只需直接控制您的盒子面板:

def top: Frame = new Frame {
  title = "Swing Test App"
  val button = new Button("Click if you can")
  val label = new Label("0 Clicks")

  val box = new BoxPanel(Orientation.Vertical) {
    contents += button
    contents += label
    border = Swing.EmptyBorder(30, 30, 10, 30)
  }
  contents = box
  listenTo(button)
  var numClicks = 0
  reactions += {
    case ButtonClicked(b) =>
      numClicks += 1
      if (numClicks < 3) {
        label.text = s"$numClicks Clicks"
      } else {
        box.contents -= label
        box.revalidate()  // refresh layout
        box.repaint()
      }
  }

  pack()
  open()
}

top