Tuesday, January 8, 2013

Use JavaFX FileChooser to open image file, and display on ImageView

The example demonstrate how to implement JavaFX FileChooser to open image file (jpg or png), and display it in a ImageView.

Use JavaFX FileChooser to open image file, and display on ImageView
Use JavaFX FileChooser to open image file, and display on ImageView


package javafxpixel;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javax.imageio.ImageIO;

/**
 * @web http://java-buddy.blogspot.com/
 */
public class JavaFXPixel extends Application {
    
    ImageView myImageView;
    
    @Override
    public void start(Stage primaryStage) {
        
        Button btnLoad = new Button("Load");
        btnLoad.setOnAction(btnLoadEventListener);
        
        myImageView = new ImageView();        
        
        VBox rootBox = new VBox();
        rootBox.getChildren().addAll(btnLoad, myImageView);
        
        Scene scene = new Scene(rootBox, 300, 300);
        
        primaryStage.setTitle("java-buddy.blogspot.com");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
    
    EventHandler<ActionEvent> btnLoadEventListener
    = new EventHandler<ActionEvent>(){

        @Override
        public void handle(ActionEvent t) {
            FileChooser fileChooser = new FileChooser();
            
            //Set extension filter
            FileChooser.ExtensionFilter extFilterJPG = new FileChooser.ExtensionFilter("JPG files (*.jpg)", "*.JPG");
            FileChooser.ExtensionFilter extFilterPNG = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.PNG");
            fileChooser.getExtensionFilters().addAll(extFilterJPG, extFilterPNG);
             
            //Show open file dialog
            File file = fileChooser.showOpenDialog(null);
                      
            try {
                BufferedImage bufferedImage = ImageIO.read(file);
                Image image = SwingFXUtils.toFXImage(bufferedImage, null);
                myImageView.setImage(image);
            } catch (IOException ex) {
                Logger.getLogger(JavaFXPixel.class.getName()).log(Level.SEVERE, null, ex);
            }

        }
    };
}


Related:
- Make ImageView scrollable, in ScrollPane.
- Auto fit JavaFX 2 ImageView
- Load image file as InputStream


6 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. Neither it doesn't work nor it does't give an error :/

    ReplyDelete
  3. Thanks a lot, this is a good example for JavaFX beginners :)

    ReplyDelete
  4. Great tutorial.

    But how would one accomplish this with other file types, along with video and audio formats?

    I have built a media player that can run video and audio files, using the FileChooser.

    But your method seems to neither work or produce an error.

    I have coded two separate events for the "load" button. When I compile and run the program and open the FileChooser box, and choose the format(in this case, .JPEG), I can select a file but nothing appears on my scene, even though I explicitly added the ImageView instance to my Pane() class.

    Any ideas?

    ReplyDelete