2
我試圖覆蓋scala.swing.Panel的座標系統。我只想在笛卡爾座標系的第一象限中工作。因此,我希望面板的左下角標記爲(0,0),因此鼠標在面板上移動時將僅記錄正x和y值。有誰知道這是否可能?覆蓋Scala面板座標
謝謝!
我試圖覆蓋scala.swing.Panel的座標系統。我只想在笛卡爾座標系的第一象限中工作。因此,我希望面板的左下角標記爲(0,0),因此鼠標在面板上移動時將僅記錄正x和y值。有誰知道這是否可能?覆蓋Scala面板座標
謝謝!
如果你只是想翻譯的座標,使左下角爲原點,而不是右上角,這樣做:
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
報告位置事件,所以沒有得到太多的第一種方式。
謝謝,新的方法是解決這個問題的好方法! – MRN