Переопределить координаты панели Scala - PullRequest
2 голосов
/ 21 сентября 2011

Я пытаюсь переопределить систему координат scala.swing.Panel.Я хочу работать только в первом квадранте в декартовой системе координат.Таким образом, я хочу, чтобы нижний левый угол панели был отмечен как (0,0), и поэтому мышь будет регистрироваться как только положительные значения x и y при перемещении по панели.Кто-нибудь знает, возможно ли это?

Спасибо !!

1 Ответ

1 голос
/ 21 сентября 2011

Если вы просто хотите перевести координаты, чтобы нижний левый угол был источником, а не верхним правым, сделайте следующее:

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

Не думаю, что вы действительно хотитепереопределить всю систему координат, так как это, скорее всего, приведет к хаосу при рисовании и выравнивании компонента.

Еще одна вещь, которую вы можете сделать, это переопределить метод getMousePosition базового JPanel:

  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, поэтому не сильно выигрывает по первому пути.

...