2010-11-05 10 views
5

अच्छा, सरल प्रश्न: मेरे पास एक सिंगलटन ऑब्जेक्ट है जो scala.swing.Panel बढ़ाता है, और मैं इसे एक साधारण माउस क्लिक पर प्रतिक्रिया देना चाहता हूं। लेकिन ... अच्छा, यह काम नहीं करता है। चूंकि स्कैला की ऐसी नई भाषा है, इसलिए विशिष्ट समस्याओं के लिए इंफोस ढूंढना इतना आसान नहीं है। शायद आप मदद कर सकते हैं:एक विस्तारित पैनल में स्कैला स्विंग प्रतिक्रियाएं

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

सुनने के लिए धन्यवाद।

उत्तर

5

प्रदर्शन कारणों से स्कैला स्विंग में डिफ़ॉल्ट रूप से माउस ईवेंट को नियंत्रित नहीं किया जाता है। आपके मामले में आप अपने object करने के लिए एक

listenTo(mouse.clicks) 

जोड़ने की जरूरत है लेकिन वहां भी एक घटना प्रकाशक mouse.moves आप यदि आप माउस की घटनाओं पर नज़र रखने की जरूरत को सुन सकते हैं है।

+0

धन्यवाद बहुत आपकी या आपकी मदद! –

संबंधित मुद्दे