L'événement de souris à la souris Javafx 2 n'est pas généré comme il se doit (comme dans Java)

StackOverflow https://stackoverflow.com/questions/8911196

Question

Dans le code suivant, je démontre une différence entre Java et Javafx2 en ce qui concerne la génération d'un événement Mouse_Clicked que je ne sais pas si elle doit être attendue ou peut être considérée comme un bogue.

Il semble que dans Javafx 2.0, vous pouvez appuyer sur le bouton de la souris, déplacer la souris aussi longtemps que vous le souhaitez, puis lorsque vous relâchez le bouton, un événement de souris à la mouche sera tiré. Contrairement à Java où, après avoir cliqué sur le bouton de la souris, vous déplacez la souris, puis relâchez le bouton, l'événement de souris ne sera pas licencié.

Pour prouver cela, essayez le code suivant, où en cliquant sur la souris, un rectangle est dessiné au point de clic. Même si vous appuyez sur le bouton gauche, déplacez la souris, puis relâchez le bouton, le rectangle sera dessiné (au point où vous avez libéré le bouton de la souris) ...

public class MouseClickTester extends Application {

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) {
    final Group root = new Group();
    Rectangle rect = new Rectangle(0, 0, 300, 300);
    rect.setFill(Color.RED);
    rect.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent me) {
            Rectangle yellowRect = new Rectangle(me.getSceneX(), me.getSceneY(),10,50);
            yellowRect.setFill(Color.YELLOW);
            root.getChildren().add(yellowRect);
        }
    });

    root.getChildren().add(rect);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
}
}

Le code suivant fait de même, mais en Java simple. Mais cette fois, si vous déplacez la souris pendant que le bouton de gauche est enfoncé, puis vous le libérez, aucun rectangle ne sera dessiné car aucun événement à la mouche ne sera licencié.

public class FrameClass extends JFrame{

public FrameClass() throws HeadlessException {
    setPreferredSize(new Dimension(300,300));
    final Canvas canv = new Canvas();
    canv.addMouseListener(new MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
            canv.getGraphics().drawRect(e.getX(), e.getY(), 10, 50);
        }

    });

    getContentPane().add(canv);
    pack();
    setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

}

public static void main(String[] args) {
    new FrameClass();
}
}

Alors la question elle-même: comment cette différence peut être justifiée? Qui se comporte bien et qui a tort? Et à la suite, comment puis-je imiter la souris en Javafx 2,0 pour se comporter de la même manière qu'en Java?

Merci pour l'aide!

Ps. Les importations sont manquantes!

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top