Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scala Swing event framework - where do I add my reactors?

I'm trying to catch a mouse-click even on a Table (which should cause a popup to be shown). The table is inside a ScrollPane which is (in turn) inside a Panel. I have added reactions to all the classes, but I can never seem to actually get a click event to be caught!

class MyPanel extends GridBagPanel {
  val gbc = new GridBagContraints( ... )

  add(new ScrollPane {
    reactions += {
      case MouseClicked(src, point, mod, clicks, pops) =>
        println("Scroll pops: " + pops)
    } 

    viewportView = new Table {
      reactions += {
        case MouseClicked(src, point, mod, clicks, pops) =>
          println("Table pops: " + pops)
      } 

      ...
    }

  }, gbc)

  reactions += {
    case MouseClicked(src, point, mod, clicks, pops) =>
      println("Panel pops: " + pops)
  } 
}

No matter where I click, nothing gets printed. What am I doing wrong?

like image 894
oxbow_lakes Avatar asked Jun 02 '09 08:06

oxbow_lakes


1 Answers

OK - You have to listen to the correct thing:

class MyPanel extends GridBagPanel {
  val gbc = new GridBagContraints( ... )

  val table = new Table { ... }

  add(new ScrollPane {

    viewportView = table
  }

  }, gbc)

  listenTo(table.Mouse.clicks) //THIS LINE IS IMPORTANT :-)

  reactions += {
    case MouseClicked(`table`, point, mod, clicks, pops) =>
      println("Panel pops: " + pops)
    } 
  }
}
like image 123
oxbow_lakes Avatar answered Oct 11 '22 08:10

oxbow_lakes