Wie kann man in JavaFX ein Bild anzeigen?
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 Anzeigebereiches (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
.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.