예제 #1
0
 /**
  * @param node
  * @return
  */
 public static Tooltip create(Node node) {
   Tooltip tooltip = new Tooltip();
   node.setOnMouseEntered(
       (MouseEvent event) -> {
         Point2D p =
             node.localToScreen(
                 node.getLayoutBounds().getMaxX() / 2,
                 node.getLayoutBounds().getMaxY()
                     + 5); // I position the tooltip at bottom right of the node (see below for
         // explanation)
         tooltip.show(node, p.getX(), p.getY());
       });
   node.setOnMouseExited(
       (MouseEvent event) -> {
         tooltip.hide();
       });
   return tooltip;
 }
예제 #2
0
  protected void fakeClick(String query) {
    baseFXRobot.waitForIdle();
    Node node = waitForNode(query);
    Point2D pos = robot.point(node).getPosition();
    baseFXRobot.mouseMove((int) pos.getX(), (int) pos.getY());
    Point2D screenPos = node.localToScreen(pos.getX(), pos.getY());
    Point2D scenePos = node.localToScene(pos.getX(), pos.getY());

    if (node instanceof Region && !(node instanceof Control)) {
      throw new IllegalArgumentException("cannot fake clicks on random regions");
    }

    runLaterAndWait(() -> waitForNode(query).requestFocus());
    if (focusSufficesClick(node)) {
      return;
    }

    MouseEvent event =
        new MouseEvent(
            MouseEvent.MOUSE_CLICKED,
            pos.getX(),
            pos.getY(),
            screenPos.getX(),
            screenPos.getY(),
            MouseButton.PRIMARY,
            1,
            false,
            false,
            false,
            false,
            false,
            false,
            false,
            true,
            false,
            false,
            new PickResult(node, scenePos.getX(), scenePos.getY()));

    EventHandler<? super MouseEvent> pressedHandler = node.getOnMousePressed();
    EventHandler<? super MouseEvent> clickedHandler = node.getOnMouseClicked();
    EventHandler<? super MouseEvent> releasedHandler = node.getOnMouseReleased();

    Platform.runLater(
        () -> {
          if (pressedHandler != null) {
            pressedHandler.handle(event);
          }
          if (clickedHandler != null) {
            clickedHandler.handle(event);
          }
          if (releasedHandler != null) {
            releasedHandler.handle(event);
          }
          if (pressedHandler == null && clickedHandler == null && releasedHandler == null) {
            node.buildEventDispatchChain(new EventDispatchChainImpl()).dispatchEvent(event);
          }
        });

    if (fireSufficesClick(node)) {
      Platform.runLater(((ButtonBase) node)::fire);
      return;
    }
  }