Scala Swing在扩展面板中的反应

Scá*_*cán 5 events swing scala

好吧,简单的问题:我有一个扩展的单例对象,scala.swing.Panel我希望它能通过简单的鼠标点击做出反应.但是......好吧,它不起作用.由于Scala是一种新语言,因此找到特定问题的信息并不容易.也许你可以帮忙:

import scala.swing._
import scala.swing.event._
import java.awt.{Graphics2D, Color}

object GamePanel extends Panel {
  val map: TileMap = new TileMap(10, 10)({
    (x, y) =>
      if (x == y) new Wood
      else if (x == 5) new Water
      else new Grass
  })

  reactions += {
    case MouseClicked(src, pt, mod, clicks, pops) => {
      selectedTile = (pt.x / map.tw, pt.y / map.th)
      println("Clicked")
      repaint
    }
  }

  var selectedTile = (0, 0)

  override def paint(g: Graphics2D) = {
    map.draw(g)
    g.setColor(Color.red)
    g.drawRect(selectedTile._1 - 1, selectedTile._2 - 1, 33, 33)
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢收听.

Mor*_*itz 5

出于性能原因,Scala Swing中默认不处理鼠标事件.在您的情况下,您需要添加一个

listenTo(mouse.clicks)
Run Code Online (Sandbox Code Playgroud)

你的object,但也有一个事件发布者mouse.moves可以听,如果你需要跟踪鼠标移动事件.