javafx - lorsque je fais glisser ma scène trop vite, la souris" ancre " change dans la scène et le glissement n'est pas correct


J'ai conçu une scène non décorée et je veux la déplacer sur l'écran en cliquant sur la scène et en la faisant glisser.

Mon contrôleur gère deux événements: mousePressendHandler et mouseDraggedHandler.

Le premier événement est déclenché lorsque l'utilisateur clique avec la souris sur la scène. Dans cette méthode, je stocke les coordonnées relatives à la scène du pointeur de la souris.

Le deuxième événement est déclenché lorsque l'utilisateur déplace la souris sans relâcher le bouton. Que je déplace la scène soustraire les coordonnées du pointeur de la souris à l'écran et définir le résultat sur la scène.

Exemples:

 @FXML
public void mousePressedHandler(MouseEvent me) {
    dragAnchorX = me.getScreenX() - stage.getX();
    dragAnchorY = me.getScreenY() - stage.getY();
}

@FXML
public void mouseDraggedHandler(MouseEvent me) {
    double stageX = me.getScreenX() - dragAnchorX;
    double stageY = me.getScreenY() - dragAnchorY;

    stage.setX(stageX);
    stage.setY(stageY);
}

Je veux éviter que la scène ne sorte de l'écran, j'ai donc modifié la deuxième méthode:

@FXML
public void mouseDraggedHandler(MouseEvent me) {
    double stageX = me.getScreenX() - dragAnchorX;
    if (stageX > 0) {
        stage.setX(stageX);
    }

    double stageY = me.getScreenY() - dragAnchorY;
    if (stageY > 0) {
        stage.setY(stageY);
    }
}

Mais si je déplace la souris trop vite, le pointeur de la souris est déplacé dans la scène et le résultat n'est donc pas correct.

Où ai-je tort?

Author: ryuujin, 2016-01-13