2011-09-21 135 views
2

我試圖覆蓋scala.swing.Panel的座標系統。我只想在笛卡爾座標系的第一象限中工作。因此,我希望面板的左下角標記爲(0,0),因此鼠標在面板上移動時將僅記錄正x和y值。有誰知道這是否可能?覆蓋Scala面板座標

謝謝!

回答

1

如果你只是想翻譯的座標,使左下角爲原點,而不是右上角,這樣做:

case e: MouseClicked => { 
    val newPoint = new Point(e.point.x, size.height - e.point.y) 
    // do stuff using newPoint instead of e.point 
    } 

我不認爲你真的想覆蓋整個座標系統,因爲它可能會對繪畫和組件進行整理。

,你能做的只是重寫底層JPanel的getMousePosition方法的另一件事:

val p = new Panel { 
    override lazy val peer = new javax.swing.JPanel with SuperMixin { 
     override def getMousePosition = { 
     val p: Point = super.getMousePosition 
     new Point(p.x, getHeight - p.y) 
     } 
    } 
    ... 

然後

case e: MouseClicked => { 
    val newPoint: Point = peer.getMousePosition 
    // do stuff 
    } 

然而,覆蓋getMousePosition不影響對MouseClicked報告位置事件,所以沒有得到太多的第一種方式。

+0

謝謝,新的方法是解決這個問題的好方法! – MRN