Компоненты Scala Swing - PullRequest
       10

Компоненты Scala Swing

2 голосов
/ 27 октября 2010

У меня есть коллекция ComboBox, объявленная как показано ниже.

val cmbAll = for (i <- 0 to 4) yield new ComboBox(List("---", "Single", "Double"))

И я пытаюсь прослушать один из них через

listenTo(cmbAll(0).selection)

Однако я не могу на самом деле выполнить реакции.

reactions += {
  case SelectionChanged(`cmbAll(0)`) => /** action here **/
}

Все это размещено в TabbedPane. Я думаю, это не проблема. Так как же прослушать отдельные компоненты внутри коллекции?

1012 * Отредактировано * Это более полный код, который я пробую в Eclipse. import scala.swing._ import scala.swing.event._ object CMBTest extends SimpleSwingApplication { lazy val ui = new TabbedPane { import TabbedPane._ val cmbCategory = for (i <- 0 to 4) yield new ComboBox(List("---", "Single", "Double")) val cmbTab = new GridBagPanel { import GridBagPanel._ val c = new Constraints c.insets = new Insets(5, 5, 5, 5) for (i <- 0 to 4) { c.gridx = 0 c.gridy = i layout(cmbCategory(i)) = c } } pages += new Page("CMBTest", cmbTab) listenTo(cmbCategory(0)) reactions += { case SelectionChanged(`cmbCategory(0)`) => { println("This is cmbCategory(0) calling") } } } def top = new MainFrame { title = "ComboBox Array Test" contents = ui } } Это сообщение об ошибке, которое я получаю, находится в части реакции, и в нем говорится, что "not found: value cmbCategory (0)".

1 Ответ

3 голосов
/ 27 октября 2010

Я не думаю, что что-либо кроме стабильного идентификатора допускается внутри `в совпадениях с образцом.В вашем случае вы неявно вызываете метод apply, выполняя (0).

. Вместо этого вы можете попробовать:

val category = cmbCategory(0)
case SelectionChanged(`category`) => {
    println("This is cmbCategory(0) calling")
...