2

以下のように宣言された ComboBox のコレクションがあります。

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

そして、私はそれを介してそれの1つを聞こうとします

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

I don't think anything other than a stable identifier is allowed inside ` in pattern matches. In your case, you are implicitly calling the apply method by doing (0).

You may try instead this:

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