0

我如何收听scala中单选按钮上的事件?我有以下代码,但由于某种原因没有执行反应。这是一个对话框,我正在寻找单选按钮选择,并相应地更改对话框窗口的标题。

val dirFileSelector = {
  List(
    new RadioButton("Directory"){
      name = "dir"

    },
    new RadioButton("File"){
      name = "file"
    }
  )
}

val buttonGroup = new ButtonGroup
dirFileSelector map { button=>
  listenTo(button)
  buttonGroup.buttons.add(button) 
}

contents = new BorderPanel{

  add(new BoxPanel(Orientation.Horizontal) {contents ++= dirFileSelector}, BorderPanel.Position.North)
}

reactions += {
  case SelectionChanged(buttonSelect) => {
    println("buttonSelect selection changed")
    buttonSelect.name match {
      case "dir" => title = "Add Directory"
      case "file" => title = "Add File"
    }
  }

}
4

1 回答 1

2

据我所知,RadioButtons 不会发出 SelectionChanged 事件。然而,它们确实会发出ButtonClicked

这是一个简单的工作示例,可以获得您想要的效果:

import swing._
import swing.event._

object app extends SimpleSwingApplication {
  val dirFileSelector = List(
    new RadioButton() {
      name = "dir"
      text = "Directory"

    },
    new RadioButton() {
      name = "file"
      text = "File"
    }
  )

  new ButtonGroup(dirFileSelector: _*)

  def top = new MainFrame {
    title = "Test"
    contents = new BoxPanel(Orientation.Horizontal) {
      contents ++= dirFileSelector
    }
    dirFileSelector.foreach(listenTo(_))
    reactions += {
      case ButtonClicked(button) => {
        button.name match {
          case "dir" => title = "Add Directory"
          case "file" => title = "Add File"
        }
      }
    }
  }
}
于 2012-11-16T15:05:24.100 回答