Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8123187

Bogus Y-value in MouseEvent

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: P3
    • Resolution: Fixed
    • Affects Version/s: 8
    • Fix Version/s: 8
    • Component/s: javafx
    • Labels:
    • Environment:

      Win7/64 Java8-b111

      Description

      double y I experience a strange problem:
      Dragging a Shape (a derivative of Circle, in my case) "sometimes" results in bogus ordinate values.

      I tried to reproduce in a very simple program, but there the error does NOT seem to happen.

      In my real program, in a deeply nested Pane, I add, among other things a:

      class SCircle extends Circle {
      ...
      public SCircle(SPoint p) {
      super();
      ...
      // mouse events
      addEventHandler(MouseEvent.DRAG_DETECTED, new EventHandler<MouseEvent>() {
      @Override
      public void handle(MouseEvent event) {
      dragging = true;
      tooltip.show(SCircle.this, getCenterX(), getCenterY()+2*RADIUS);
      }
      });
      addEventHandler(MouseEvent.MOUSE_DRAGGED, new EventHandler<MouseEvent>() {
      @Override
      public void handle(MouseEvent event) {
      if (dragging && center != null) { <----- BREAKPOINT HERE
      moveTo(event.getX(), event.getY());
      }
      }
      });
      addEventHandler(MouseEvent.MOUSE_RELEASED, new EventHandler<MouseEvent>() {
      @Override
      public void handle(MouseEvent event) {
      if (dragging) {
      if (center != null) {
      moveTo(event.getX(), event.getY());
      }
      tooltip.hide();
      dragging = false;
      }
      }
      });
      ...
      }
      protected void moveTo(double x, double y) {
      StringBuilder sb = new StringBuilder();
      sb.append("moveTo(");
      sb.append(String.valueOf(x));
      sb.append(", ");
      sb.append(String.valueOf(y));
      sb.append("): ");
      switch (center.getConstraint()) {
      case FIX:
      sb.append("FIX!");
      break;
      case FIXX:
      sb.append("FIXX");
      center.setY(y);
      break;
      case FIXY:
      sb.append("FIXY");
      center.setX(x);
      break;
      case NONE:
      sb.append("done");
      center.setX(x);
      center.setY(y);
      break;
      }
      LOGGER.trace(sb.toString());
      setTooltipString();
      }

      ...
      }

      Here I experience several malfunctions, main one is that "sometimes" (roughly one in five) I get completely bogus values with event.getY(), i.e.: values way out off the screen.
      Typical printout (print is in moveTo(), but breakpointing shows bogus value is already in event.y) follows:

      2013-10-19 14:43:01 TRACE SPoint:99 - setX(153.0): done.
      2013-10-19 14:43:01 TRACE SPoint:133 - setY(179.0): done.
      2013-10-19 14:43:01 TRACE SCircle:199 - moveTo(153.0, 179.0): done
      2013-10-19 14:43:01 TRACE SPoint:99 - setX(145.0): done.
      2013-10-19 14:43:01 TRACE SPoint:133 - setY(163.0): done.
      2013-10-19 14:43:01 TRACE SCircle:199 - moveTo(145.0, 163.0): done
      2013-10-19 14:43:01 TRACE SPoint:99 - setX(145.0): done.
      2013-10-19 14:43:01 TRACE SPoint:133 - setY(160.0): done.
      2013-10-19 14:43:01 TRACE SCircle:199 - moveTo(145.0, 160.0): done
      2013-10-19 15:03:12 TRACE SPoint:99 - setX(144.0): done.
      2013-10-19 15:03:12 TRACE SPoint:133 - setY(-2066.0): [clipping Y UP to 50.0] done.
      2013-10-19 15:03:12 TRACE SCircle:199 - moveTo(144.0, -2066.0): done
      2013-10-19 15:03:12 TRACE SPoint:99 - setX(132.0): done.
      2013-10-19 15:03:12 TRACE SPoint:133 - setY(127.0): done.
      2013-10-19 15:03:12 TRACE SCircle:199 - moveTo(132.0, 127.0): done
      2013-10-19 15:03:12 TRACE SPoint:99 - setX(132.0): done.
      2013-10-19 15:03:12 TRACE SPoint:133 - setY(-2098.0): [clipping Y UP to 50.0] done.
      2013-10-19 15:03:12 TRACE SCircle:199 - moveTo(132.0, -2098.0): done
      2013-10-19 15:03:35 TRACE SPoint:99 - setX(248.0): done.
      2013-10-19 15:03:35 TRACE SPoint:133 - setY(127.0): done.
      2013-10-19 15:03:35 TRACE SCircle:199 - moveTo(248.0, 127.0): done
      2013-10-19 15:03:35 TRACE SPoint:99 - setX(248.0): done.
      2013-10-19 15:03:35 TRACE SPoint:133 - setY(-2097.0): [clipping Y UP to 50.0] done.
      2013-10-19 15:03:35 TRACE SCircle:199 - moveTo(248.0, -2097.0): done
      2013-10-19 15:03:35 TRACE SPoint:99 - setX(248.0): done.
      2013-10-19 15:03:35 TRACE SPoint:133 - setY(131.0): done.
      2013-10-19 15:03:35 TRACE SCircle:199 - moveTo(248.0, 131.0): done
      2013-10-19 15:03:35 TRACE SPoint:99 - setX(248.0): done.
      2013-10-19 15:03:35 TRACE SPoint:133 - setY(135.0): done.
      2013-10-19 15:03:35 TRACE SCircle:199 - moveTo(248.0, 135.0): done

      I am aware this is not a "proper" bug report, but I am currently unable to debug this further (and it is obviously very annoying!).
      As said I tried a very small program dragging a Circle around, but that does NOT show the malfunction.
      Can someone suggest how to better trace the error so it can be fixed?

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              psafrata Pavel Šafrata
              Reporter:
              mcondareljfx Mauro Condarelli (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved:
                Imported: