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

У меня есть коллекция 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. Я думаю, это не проблема. Итак, как я могу прослушивать отдельные компоненты внутри коллекции?

Отредактировано

Это более полный код, который я пытаюсь использовать в 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
    }
}

Это сообщение об ошибке, которое у меня есть, находится в части реакции, и в нем говорится, что «не найдено: значение cmbCategory (0)».


person JohanSJA    schedule 27.10.2010    source источник
comment
Можете ли вы опубликовать более полный код?   -  person Tom Crockett    schedule 27.10.2010
comment
Я добавил более полный код в отредактированную часть.   -  person JohanSJA    schedule 27.10.2010


Ответы (1)


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

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

val category = cmbCategory(0)
case SelectionChanged(`category`) => {
    println("This is cmbCategory(0) calling")
person Daniel C. Sobral    schedule 27.10.2010