覆盖Scala面板坐标

时间:2011-09-21 06:38:51

标签: scala override panel scala-2.8 scala-collections

我试图覆盖scala.swing.Panel的坐标系。我想只在笛卡尔坐标系的第一象限上工作。因此,我希望面板的左下角标记为(0,0),因此当在面板上移动时,鼠标将仅注册为正x和y值。有谁知道这是否可能?

谢谢!

1 个答案:

答案 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事件中报告的位置,因此在第一种情况下获得的收益不会很多。