Tuesday, April 2, 2013

Display images on JavaFX Pagination Control

Last post demonstrate a basic example of using Pagination Control of JavaFX. Now, it's modified to display images on Pagination.

Display images on JavaFX Pagination Control
Display images on JavaFX Pagination Control


package javafx_pagination;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
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.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Pagination;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.Stage;
import javafx.util.Callback;
import javax.imageio.ImageIO;

/**
* @web http://java-buddy.blogspot.com/
*/
public class JavaFX_Pagination extends Application {

private Pagination pagination;
File filesJpg[];

@Override
public void start(final Stage primaryStage) {

Button btn = new Button();
btn.setText("Open a New Window");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
openDirectoryChooser(primaryStage);
}
});

StackPane root = new StackPane();
root.getChildren().add(btn);

Scene scene = new Scene(root, 300, 250);

primaryStage.setTitle("java-buddy.blogspot.com");
primaryStage.setScene(scene);
primaryStage.show();
}

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

private void openDirectoryChooser(Stage parent) {
DirectoryChooser directoryChooser = new DirectoryChooser();
File selectedDirectory =
directoryChooser.showDialog(parent);

if (selectedDirectory != null) {
FilenameFilter filterJpg = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".jpg");
}
};

filesJpg = selectedDirectory.listFiles(filterJpg);
openPageWindow();
}
}

private void openPageWindow() {
int numOfPage = filesJpg.length;

Stage pageStage = new Stage();
pagination = new Pagination(numOfPage);
pagination.setPageFactory(new Callback<Integer, Node>() {
@Override
public Node call(Integer pageIndex) {
return createPage(pageIndex);
}
});

AnchorPane anchor = new AnchorPane();
AnchorPane.setTopAnchor(pagination, 10.0);
AnchorPane.setRightAnchor(pagination, 10.0);
AnchorPane.setBottomAnchor(pagination, 10.0);
AnchorPane.setLeftAnchor(pagination, 10.0);
anchor.getChildren().add(pagination);

Scene scene = new Scene(anchor, 400, 300);

pageStage.setTitle("Image View Pages");
pageStage.setScene(scene);
pageStage.show();
}

public VBox createPage(int index) {

ImageView imageView = new ImageView();

File file = filesJpg[index];
try {
BufferedImage bufferedImage = ImageIO.read(file);
Image image = SwingFXUtils.toFXImage(bufferedImage, null);
imageView.setImage(image);
imageView.setFitWidth(400);
imageView.setPreserveRatio(true);
imageView.setSmooth(true);
imageView.setCache(true);
} catch (IOException ex) {
Logger.getLogger(JavaFX_Pagination.class.getName()).log(Level.SEVERE, null, ex);
}

VBox pageBox = new VBox();
pageBox.getChildren().add(imageView);
return pageBox;
}
}




No comments:

Post a Comment