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 |
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;
}
}
Hi, How Can I achieve the above using FXML?
ReplyDeletetry rename pagination in scene builder and too in the controller equal to example...
ReplyDeletesorry bad english, i from brazil... hehe :D