Last post demonstrate simple example of "
JavaFX TitledPane ". This post show how to load multi images in TitledPane within Accordion.
Display multi images in JavaFX 2 TitledPanes
package javafx_titledpane; 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.Group; import javafx.scene.Scene; import javafx.scene.control.Accordion; import javafx.scene.control.Button; import javafx.scene.control.TitledPane; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.StackPane; import javafx.stage.DirectoryChooser; import javafx.stage.Stage; import javax.imageio.ImageIO; /** * @web http://java-buddy.blogspot.com/ */ public class JavaFX_TitledPane extends Application { File filesJpg[]; Image images[]; ImageView imageViews[]; BufferedImage bufferedImage[]; TitledPane titledPanes[]; @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); openTitledPane(); } } private void openTitledPane(){ int numOfJpg = filesJpg.length; images = new Image[numOfJpg]; bufferedImage = new BufferedImage[numOfJpg]; imageViews = new ImageView[numOfJpg]; titledPanes = new TitledPane[numOfJpg]; for (int i = 0; i < numOfJpg; i++) { try { File file = filesJpg[i]; bufferedImage[i] = ImageIO.read(file); images[i] = SwingFXUtils.toFXImage(bufferedImage[i], null); imageViews[i] = new ImageView(); imageViews[i].setImage(images[i]); imageViews[i].setFitWidth(400); imageViews[i].setPreserveRatio(true); imageViews[i].setSmooth(true); imageViews[i].setCache(true); titledPanes[i] = new TitledPane(String.valueOf(i), imageViews[i]); } catch (IOException ex) { Logger.getLogger(JavaFX_TitledPane.class.getName()).log(Level.SEVERE, null, ex); } } Accordion accordion = new Accordion(); accordion.getPanes().addAll(titledPanes); Stage titledPaneStage = new Stage(); titledPaneStage.setTitle("TitledPane"); Scene scene = new Scene(new Group(), 400, 400); Group root = (Group)scene.getRoot(); root.getChildren().add(accordion); titledPaneStage.setScene(scene); titledPaneStage.show(); } } VIDEO
No comments:
Post a Comment