2012-01-18 12 views
3

次のコードでは、JavaとjavaFX2の違いを、私がMOUSE_CLICKEDイベントの生成に関係する限り説明します。予想されるか、またはバグと見なすことができます。JavaFX 2 MouseClickedイベントが生成されない(JAVAのように)

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

これを証明するには、次のコードを試してください。マウスをクリックすると、クリック点に四角形が描画されます。あなたは左のボタンを押しても、マウスを移動し、(マウスボタンをリリース時点で)矩形が描画されますボタンを放し...

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。輸入は行方不明です!

答えて

2

これは、意図的に、同じノード内で結果的に押され、リリースされたすべてのアクションに対して生成されたマウスクリックです。

動作が正しいか間違っているのは真実ではありません。異なるアプローチは両方のアプローチを使用します。現在の動作がJavaFXにとって最も有用であると判断されました。

N.B .:マウスがクリック間を移動したかどうかをダブルクリック(以上)して確認してください。

+0

お返事ありがとうございます。正直なところ私はこの機能を好きではありません。なぜなら、JavaでMouseClickイベントを同じにしたいのであれば、私は自分の小さなダーティなマウスクリックの実装を書く必要があります... – Pitelk

+0

どのボタンが押されたかを確認する方法はありませんボイラープレートコードを書かずにクリック/リリースハンドラを使う? – ajeh

+0

@ajeh、これはまったく異なる質問ですので、別途ご相談ください –

関連する問題