我试图覆盖scala.swing.Panel的坐标系。我想只在笛卡尔坐标系的第一象限上工作。因此,我希望面板的左下角标记为(0,0),因此当在面板上移动时,鼠标将仅注册为正x和y值。有谁知道这是否可能?
谢谢!
答案 0 :(得分: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
事件中报告的位置,因此在第一种情况下获得的收益不会很多。