2010-11-05 6 views
5

Eh bien, question simple: j'ai un objet singleton qui s'étend scala.swing.Panel, et je veux le faire réagir sur un simple clic de souris. Mais ... eh bien, ça ne marche pas. Depuis Scala est un nouveau langage, trouver des informations sur des problèmes spécifiques n'est pas si facile. Peut-être que vous pouvez aider:Scala Swing réactions dans un panneau étendu

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) 
    } 
} 

Merci d'avoir écouté.

Répondre

5

Les événements de souris ne sont pas gérés par défaut dans Scala Swing pour des raisons de performances. Dans votre cas, vous devez ajouter un

listenTo(mouse.clicks) 

à votre object mais il y a aussi un éditeur d'événements mouse.moves vous pouvez écouter si vous avez besoin de suivre les événements de déplacement de la souris.

+0

Merci beaucoup ou votre aide! –

Questions connexes