2010-11-05 13 views
5

Bene, domanda semplice: ho un oggetto singleton che si estende scala.swing.Panel e voglio farlo reagire con un semplice clic del mouse. Ma ... beh, non funziona. Dal momento che Scala è un linguaggio così nuovo, trovare informazioni su problemi specifici non è così facile. Forse puoi aiutare:Reazioni Scala Swing in un pannello esteso

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

Grazie per l'ascolto.

risposta

5

Gli eventi del mouse non vengono gestiti per impostazione predefinita in Scala Swing per motivi di prestazioni. Nel tuo caso è necessario aggiungere un

listenTo(mouse.clicks) 

al object ma c'è anche un editore evento mouse.moves potete ascoltare se è necessario tenere traccia degli eventi del mouse mossa.

+0

Grazie mille o il tuo aiuto! –