The strategy employed in this example is to set the image file as a background for a JavaFX Pane object. Opening the image is a straightforward use of the JavaFX file chooser dialog. Error handling is done via a simple error dialog created as an Alert. Displaying the image requires the following steps:
- Transform the File object into a URL, and use this to create an Image object.
- Create a BackgroundSize for the object.
- By setting the height and width to AUTO, the image will automatically resize as the window displaying it is resized.
- It will not deform the image; if the aspect ratio of the displaying window does not match the image, the image will be truncated.
- Create a BackgroundImage object.
- The first parameter passes the Image object to use as its basis.
- The second and third parameters control whether the object is repeated in the X and Y directions. For this example, I deemed this undesirable.
- The fourth parameter centers the image in the background.
- The final parameter is the BackgroundSize object created before.
- Finally, we designate the BackgroundImage as the Pane's background.
import java.io.File;
import java.net.MalformedURLException;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundImage;
import javafx.scene.layout.BackgroundPosition;
import javafx.scene.layout.BackgroundRepeat;
import javafx.scene.layout.BackgroundSize;
import javafx.scene.layout.Pane;
import javafx.stage.FileChooser;
import javafx.stage.FileChooser.ExtensionFilter;
public class DemoController {
@FXML
Pane pane;
@FXML
Button open;
@FXML
void initialize() {
open.setOnAction(event -> imageOpener());
}
void imageOpener() {
File imgFile = openImage();
try {
if (imgFile != null) {
displayImage(imgFile);
}
} catch (MalformedURLException e) {
showError(e);
}
}
File openImage() {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Select an Image File");
fileChooser.getExtensionFilters().add(new ExtensionFilter(
"Image Files", "*.png", "*.jpg", "*.gif"));
return fileChooser.showOpenDialog(null);
}
void displayImage(File imgFile) throws MalformedURLException {
Image background = new Image(imgFile.toURI().toURL().toString());
BackgroundSize size = new BackgroundSize(BackgroundSize.AUTO,
BackgroundSize.AUTO, false, false, true, true);
BackgroundImage bimg = new BackgroundImage(background,
BackgroundRepeat.NO_REPEAT, BackgroundRepeat.NO_REPEAT,
BackgroundPosition.CENTER, size);
pane.setBackground(new Background(bimg));
}
void showError(Exception e) {
Alert info = new Alert(AlertType.ERROR);
info.setTitle("Image not found");
info.setHeaderText("Image not found");
info.setContentText(e.getMessage());
info.showAndWait();
}
}







