3

次のコードでは、MOUSE_CLICKEDイベントの生成に関する限り、javaとjavaFX2の違いを示しています。これは、予期されるか、バグと見なされるかがわかりません。

JavaFX 2.0では、マウスボタンを押して、マウスを好きなだけ動かしてから、ボタンを離すと、mouseClickedイベントが発生するようです。マウスボタンをクリックした後にマウスを動かしてからボタンを離した場合、MouseClickedイベントは発生しないJAVAとは対照的です。

これを証明するには、次のコードを試してください。マウスをクリックすると、クリックポイントに長方形が描画されます。左ボタンを押しても、マウスを動かしてボタンを離すと、長方形が描画されます(マウスボタンを離した位置に)...

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();
}
}

次のコードも同じですが、単純なJavaです。ただし、今回は、左ボタンを押したままマウスを動かしてから離すと、mouseClickedイベントが発生しないため、長方形は描画されません。

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();
}
}

それで、質問自体:この違いをどのように正当化することができますか?誰が正しく行動し、誰が間違っているのですか?そして余波で、javaFX 2,0でmouseClickedをエミュレートして、Javaと同じように動作させるにはどうすればよいですか?

助けてくれてありがとう!

PS。インポートがありません!

4

1 に答える 1

2

これは意図的なものです。同じノードで、結果として押されて放されたアクションごとにマウスクリックが生成されます。

どちらの振る舞いが正しいか間違っているかという真実はありません-異なるtakeitsは両方のアプローチを使用します。現在の動作がJavaFXに最も役立つことが決定されました。

注意:ダブル(およびそれ以上)クリックすると、クリック間でマウスが移動したかどうかが確認されます。

于 2012-01-19T11:06:41.597 に答える