Wie kann man in JavaFX ein Bild anzeigen?

Eine ImageView ist geeignet, Bilder darzustallen, die mit der Klasse javafx.scene.image.Image geladen wurden. Auch die Anzeige von Bildausschnitten, Drehungen und Skalierungen sind möglich.

Das Beispiel demonstriert die Darstellung eines Bildausschnittes in einem einfachen Fenster mit JavaFX. Wie in JavaFX üblich erbt die vorliegende Klasse von Application und wird in main() durch launch() gestartet.

In start() wird zunächst ein Image-Objekt durch Aufruf des Konstruktors mit dem String des Pfades zur Bilddatei erzeugt. Als nächstes wird eine ImageView gebildet, der das Image-Objekt durch die Methode setImage() übergeben wird. Die folgenden zwei Zeilen dienen dann der Begrenzung der Darstellung des Bildes, indem ein Rechteck des Viewport festgelegt wird.

import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class BildDarstellen extends Application {
    @Override
    public void start(Stage primaryStage) {
        Image image = new Image("img/wien.jpg");

        ImageView imgView = new ImageView();
        imgView.setImage(image);
        Rectangle2D viewportRect = new Rectangle2D(170, 80, 120, 300);
        imgView.setViewport(viewportRect);

        HBox box = new HBox();
        box.getChildren().add(imgView);
        Scene scene = new Scene(box);

        primaryStage.setTitle("ImageView Beispiel");
        primaryStage.setWidth(imgView.getViewport().getWidth());
        primaryStage.setHeight(imgView.getViewport().getHeight());
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
            Application.launch(args);
    }
}

Die eigentliche Positionierung der ImageView auf dem Fenster erfolgt in einem Box-Objekt, das einer Scene übergeben wird. Dies geschieht so, dass die der Box eingefügten Elemente per getChildren() in Form einer hier noch leeren ObservableList geholt und die ImageView dieser angefügt wird.

Das der start()-Methode übergebene Stage-Objekt wird nach Setzen des Fenstertitels auf die Größe des dargestellten Bildausschnittes skaliert, bevor ihm die Scene beigefügt wird.
Da die Fenstergröße (ohne Fensterleiste) hier exakt dem Bildausschnitt entspricht, hätte die Skalierung auch durch die Methode Stage#sizeToScene() erfolgen können. Sie setzt die Breite und Höhe des Fensters ebenfalls auf die Werte der enthaltenen Scene.

ImageView