2016-03-29 2 views
1

Ich habe ein ImageView in einem ScrollPane. Ich kann das Mausklickereignis erhalten, indem ich einen Listener zum ScrollPane hinzufüge. Ich möchte jedoch die x- und y-Koordinaten des Pixels auf dem Bild erhalten, auf das geklickt wurde.JavaFX: Erhalte die x- und y-Pixelkoordinaten, die auf ein ImageView geklickt wurden

Um es noch komplizierter zu machen, kann das Bild hinein und heraus gezoomt werden, aber ich kann das wahrscheinlich herausfinden, sobald ich eine Idee davon habe, was ich mache.

+0

Haben Sie versucht, getSceneX oder getScreenX oder getX? Was ist mit dir? – matt

+0

Diese beiden erhalten das x auf dem Bildschirm, nicht das Bild. –

Antwort

4

Fügen Sie den Maus-Listener dem ImageView anstelle der ScrollPane hinzu.

Hier ist ein einfaches Beispiel:

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

Maus-Listener funktionieren nicht in ImageViews. Ich muss es zum ScrollPane hinzufügen und prüfen, ob getTarget() die ImageView ist. –

+1

Sicher tun sie. Poste deinen Code, wenn er nicht funktioniert. –

+0

Es funktioniert tatsächlich mit einem anderen Bild. Die transparenten Pixel im Bild hielten das Ereignis an. –

Verwandte Themen