2010-11-05 1 views
5

Câu hỏi đơn giản: Tôi có một đối tượng đơn lẻ mở rộng scala.swing.Panel và tôi muốn nó phản ứng trên một cú nhấp chuột đơn giản. Nhưng ... tốt, nó không hoạt động. Vì ngôn ngữ mới của Scala như vậy, việc tìm kiếm thông tin cho các vấn đề cụ thể không dễ dàng như vậy. Có thể bạn có thể giúp:Các phản ứng Scala Swing trong Bảng điều khiển mở rộng

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

Cảm ơn bạn đã lắng nghe.

Trả lời

5

Sự kiện chuột không được xử lý theo mặc định trong Scala Swing vì lý do hiệu suất. Trong trường hợp của bạn, bạn cần phải thêm một

listenTo(mouse.clicks) 

để object của bạn, nhưng đó cũng là một nhà xuất bản sự kiện mouse.moves bạn có thể nghe nếu bạn cần phải theo dõi các sự kiện chuột di chuyển.

+0

Cảm ơn rất nhiều hoặc sự giúp đỡ của bạn! –