2012-07-19 13 views
6

私はMouseEvent.MOUSE_CLICKEDをシミュレートする必要があります。私は前述のタイプのイベントをディスパッチするためにfireEventの特定のノードメソッドを使用したいと思います。しかし、私は1つを生成すると苦労しています。 javafx.scene.input.MouseEventには有効なコンストラクタがありませんが、古いjava.awt.event.MouseEventオブジェクトはこのようにインスタンス化できます。それでも、私は変換のための実際の解決策を見いだせませんでした。これをどうやって回りますか?JavaFXでMouseEventを生成

ありがとうございました。

+0

あなたは 'java.awt.Robot.mouse *'メソッド –

+0

右を使用してマウスクリックをシミュレートすることができますが、どのように私は 'java.awtのを変換します。 event.MouseEvent'を 'javafx.scene.input.MouseEvent'に変更しますか?実際のイベントを処理するメソッドシグネチャには、javafx。*パッケージの** MouseEvent **パッケージ – XXL

+2

が必要です。Robotクラスを使用している場合は、マウスクリックをシミュレートします。Java FXインフラストラクチャは、それだけですべての必要なクラスを捕捉して作成します。あなたはちょうどそれのために 'Robot.mousePress(10,10)'のようなスムースを言う。 –

答えて

8

MouseEventは、廃止予定のMouseEvent.impl_mouseEvent APIを使用して生成できます。以前はJavaFX 2.0用にこのforum threadを使っていました。 APIは、JavaFXの実装で使用されるプライベートAPIであり、APIが同じ署名を保持すること、または将来のバージョンに存在することが保証されていないことが理由で廃止されています(これは、フォーラムスレッドはコンパイルされません

このようなイベントを生成する正しい解決策は、これをサポートする公開APIを用意することです。この機能を提供する要求が既にあります。RT-9383 "Add proper constructors & factory methods to event classes, remove impl"。このジラは来年一方のJavaFX 3.0のために。

、Robotクラスの利用セルゲイは、おそらくあなたの最善の方法であることを示唆しているよう。


更新:のJava 8はpublic constructors for javafx.event.MouseEventを追加し、(ジェイThakkarの答えに示されているように)、あなたは(あなたもfire events on Windowsをすることができます)Event.fireEventを使用してこのようなイベントを発生することができます。

+0

かなり精巧な答え。ありがとうございました。 – XXL

+0

はJiraにアクセスできない – Arne

+0

Jiraアクセスは私のために働く。新しいイベントコンストラクタは来年リリースされる[Java 8 branch](https://jdk8.java.net/download.html)に追加されました。 – jewelsea

12

これはあなたのノードで単一のプライマリマウスクリック起動します:

Event.fireEvent(YOUR NODE, new MouseEvent(MouseEvent.MOUSE_CLICKED, 0, 
       0, 0, 0, MouseButton.PRIMARY, 1, true, true, true, true, 
       true, true, true, true, true, true, null)); 
+0

参照用パッケージ: import javafx.event.Event; import javafx.scene.input.MouseButton; import javafx.scene.input.MouseEvent; – user1053510

2

をそれとも、ボタンのプログラムクリックを行うには、単純な「ハック」を使用することができます。 「使用率」クラスでこのメソッドを作成します :

その後
public static void click(javafx.scene.control.Control control) { 
    java.awt.Point originalLocation = java.awt.MouseInfo.getPointerInfo().getLocation(); 
    javafx.geometry.Point2D buttonLocation = control.localToScreen(control.getLayoutBounds().getMinX(), control.getLayoutBounds().getMinY()); 
    try { 
     java.awt.Robot robot = new java.awt.Robot(); 
     robot.mouseMove((int)buttonLocation.getX(), (int)buttonLocation.getY()); 
     robot.mousePress(InputEvent.BUTTON1_MASK); 
     robot.mouseRelease(InputEvent.BUTTON1_MASK); 
     robot.mouseMove((int) originalLocation.getX(), (int)originalLocation.getY()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

、単にパラメータとして、あなたのボタンを渡す方法のクリックを呼び出すボタンを「クリック」します。

1

ハンドラを設定すると、パブリックプロパティが設定されます。あなたは)(そのプロパティからイベントを取得し、ハンドルを呼び出すことができます。

button1.setOnMouseClicked().... 
the corresponding property is 
button1.onMouseClickedProperty().get().handle(me);//where me is some MouseEvent object 
関連する問題