package javafximagefilechooser;
import java.awt.Desktop;
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.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
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 JavaFXImageFileChooser extends Application {
@Override
public void start(Stage primaryStage) {
final FileChooser fileChooser = new FileChooser();
final Button openButton = new Button("Open Image");
openButton.setOnAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(final ActionEvent e) {
setExtFilters(fileChooser);
File file = fileChooser.showOpenDialog(primaryStage);
if (file != null) {
openNewImageWindow(file);
}
}
});
StackPane root = new StackPane();
root.getChildren().add(openButton);
Scene scene = new Scene(root, 400, 150);
primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
private void setExtFilters(FileChooser chooser){
chooser.getExtensionFilters().addAll(
new FileChooser.ExtensionFilter("All Images", "*.*"),
new FileChooser.ExtensionFilter("PNG", "*.png")
);
}
private void openNewImageWindow(File file){
Stage secondStage = new Stage();
MenuBar menuBar = new MenuBar();
Menu menuFile = new Menu("File");
MenuItem menuItem_Save = new MenuItem("Save Image");
menuFile.getItems().addAll(menuItem_Save);
menuBar.getMenus().addAll(menuFile);
Label name = new Label(file.getAbsolutePath());
Image image = new Image(file.toURI().toString());
ImageView imageView = new ImageView();
menuItem_Save.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
FileChooser fileChooser = new FileChooser();
fileChooser.setTitle("Save Image");
File file = fileChooser.showSaveDialog(secondStage);
if (file != null) {
try {
ImageIO.write(SwingFXUtils.fromFXImage(imageView.getImage(),
null), "png", file);
} catch (IOException ex) {
Logger.getLogger(
JavaFXImageFileChooser.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
});
final VBox vbox = new VBox();
vbox.setAlignment(Pos.CENTER);
vbox.setSpacing(10);
vbox.setPadding(new Insets(0, 10, 0, 10));
vbox.getChildren().addAll(name, imageView);
imageView.setFitHeight(400);
imageView.setPreserveRatio(true);
imageView.setImage(image);
imageView.setSmooth(true);
imageView.setCache(true);
Scene scene = new Scene(new VBox(), 400, 350);
((VBox)scene.getRoot()).getChildren().addAll(menuBar, vbox);
secondStage.setTitle(file.getName());
secondStage.setScene(scene);
secondStage.show();
}
}
Thursday, December 25, 2014
JavaFX FileChooser, open and save image file
Example to open and save png files, using JavaFX FileChooser.

No comments:
Post a Comment