2010-11-05 13 views
5

Bien, simple pregunta: Tengo un objeto singleton que se extiende scala.swing.Panel, y quiero que reaccione con un simple clic del mouse. Pero ... bueno, no funciona. Dado que Scala es un idioma tan nuevo, no es tan fácil encontrar información sobre problemas específicos. Tal vez puedas ayudar:reacciones de Scala Swing en un Panel extendido

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

Gracias por escuchar.

Respuesta

5

Los eventos del mouse no se manejan de manera predeterminada en Scala Swing por motivos de rendimiento. En su caso es necesario agregar un

listenTo(mouse.clicks) 

a su object pero también es un publicador de eventos mouse.moves se puede escuchar si es necesario realizar un seguimiento de los eventos de movimiento del ratón.

+0

Muchas gracias o tu ayuda! –

Cuestiones relacionadas