2016-03-29 39 views
1

ScrollPane内にImageViewがあります。 ScrollPaneにリスナーを追加して、マウスのクリックイベントを取得できます。しかし、クリックした画像上のピクセルのx座標とy座標を取得したい。JavaFX:ImageViewでxとyのピクセル座標をクリックします。

さらに複雑にするには、画像をズームイン/ズームアウトすることができますが、私がやっていることを考えれば、それを理解することができます。

+0

あなたはgetSceneXまたはgetScreenXかのgetXを試してみましたか? yはどう? – matt

+0

これらはどちらも画像ではなく画面上のxを取得します。 –

答えて

4

マウスリスナーをScrollPaneの代わりにImageViewに追加します。ここで

は簡単な例です:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.image.ImageView; 
import javafx.stage.Stage; 

public class ClickOnScrollingImage extends Application { 

    private static final String IMAGE_URL = "https://www.nasa.gov/sites/default/files/styles/full_width_feature/public/thumbnails/image/crop_p_color2_enhanced_release_small.png?itok=5BtHNey_" ; 


    @Override 
    public void start(Stage primaryStage) { 
     ScrollPane scroller = new ScrollPane(); 
     ImageView imageView = new ImageView(IMAGE_URL); 
     scroller.setContent(imageView); 

     // the following line allows detection of clicks on transparent 
     // parts of the image: 
     imageView.setPickOnBounds(true); 

     imageView.setOnMouseClicked(e -> { 
      System.out.println("["+e.getX()+", "+e.getY()+"]"); 
     }); 
     Scene scene = new Scene(scroller, 600, 600); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

ImageViewsではマウスリスナーが機能しません。私はそれをScrollPaneに追加し、getTarget()がImageViewかどうかをチェックする必要があります。 –

+1

もちろんあります。それが動作していない場合は、コードを投稿してください。 –

+0

実際には別のイメージで動作します。イメージ内の透明なピクセルは、イベントが動作しなくなっていました。 –

関連する問題