2

我有一个声明如下的 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)”。

4

1 回答 1

3

我认为模式匹配中的 ` 内不允许使用稳定标识符以外的任何内容。在您的情况下,您正在apply通过执行隐式调用该方法(0)

你可以试试这个:

val category = cmbCategory(0)
case SelectionChanged(`category`) => {
    println("This is cmbCategory(0) calling")
于 2010-10-27T10:56:26.270 回答