Реакции Scala Swing в расширенной панели - PullRequest
5 голосов
/ 06 ноября 2010

Ну, простой вопрос: у меня есть одноэлементный объект, который расширяет 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)
  }
}

Спасибо за прослушивание.

1 Ответ

5 голосов
/ 06 ноября 2010

События мыши не обрабатываются по умолчанию в Scala Swing по соображениям производительности. В вашем случае вам нужно добавить

listenTo(mouse.clicks)

на ваш object, но есть также издатель событий mouse.moves, который вы можете прослушать, если вам нужно отслеживать события перемещения мыши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...