Le Tutoriel de JavaFX FileChooser et DirectoryChooser
View more Tutorials:
FileChooser permet aux utilisateurs de naviguer dans le système des fichiers pour choisir un ou plusieurs fichiers. Une composition similaire est DirectoryChooser qui permet aux utilisateurs de sélectionner un dossier.
Voici l'image de FileChooser/DirectoryChooser lorsqu'il fonctionne sur différents systèmes d'exploitation.
Mac OS

Windows

Linux

L'exemple suivant: lorsque l'utilisateur clique sur le button, un FileChooser affichera à sélectionner le fichier et l'ouvrira.

OpenFileChooserDemo.java
package org.o7planning.javafx.filechooser; import java.awt.Desktop; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.List; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextArea; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; import javafx.stage.Stage; public class OpenFileChooserDemo extends Application { private Desktop desktop = Desktop.getDesktop(); @Override public void start(Stage primaryStage) throws Exception { final FileChooser fileChooser = new FileChooser(); TextArea textArea = new TextArea(); textArea.setMinHeight(70); Button button1 = new Button("Select One File and Open"); Button buttonM = new Button("Select Multi Files"); button1.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { textArea.clear(); File file = fileChooser.showOpenDialog(primaryStage); if (file != null) { openFile(file); List<File> files = Arrays.asList(file); printLog(textArea, files); } } }); buttonM.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { textArea.clear(); List<File> files = fileChooser.showOpenMultipleDialog(primaryStage); printLog(textArea, files); } }); VBox root = new VBox(); root.setPadding(new Insets(10)); root.setSpacing(5); root.getChildren().addAll(textArea, button1, buttonM); Scene scene = new Scene(root, 400, 200); primaryStage.setTitle("JavaFX FileChooser (o7planning.org)"); primaryStage.setScene(scene); primaryStage.show(); } private void printLog(TextArea textArea, List<File> files) { if (files == null || files.isEmpty()) { return; } for (File file : files) { textArea.appendText(file.getAbsolutePath() + "\n"); } } private void openFile(File file) { try { this.desktop.open(file); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { Application.launch(args); } }
Par exemple,utilisez DirectoryChooser pour sélectionner un dossier :
DirectoryChooserDemo.java
package org.o7planning.javafx.filechooser; import java.io.File; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextArea; import javafx.scene.layout.VBox; import javafx.stage.DirectoryChooser; import javafx.stage.Stage; public class DirectoryChooserDemo extends Application { @Override public void start(Stage primaryStage) throws Exception { final DirectoryChooser directoryChooser = new DirectoryChooser(); configuringDirectoryChooser(directoryChooser); TextArea textArea = new TextArea(); textArea.setMinHeight(70); Button button = new Button("Open DirectoryChooser and select a directory"); button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { File dir = directoryChooser.showDialog(primaryStage); if (dir != null) { textArea.setText(dir.getAbsolutePath()); } else { textArea.setText(null); } } }); VBox root = new VBox(); root.setPadding(new Insets(10)); root.setSpacing(5); root.getChildren().addAll(textArea, button); Scene scene = new Scene(root, 400, 200); primaryStage.setTitle("JavaFX DirectoryChooser (o7planning.org)"); primaryStage.setScene(scene); primaryStage.show(); } private void configuringDirectoryChooser(DirectoryChooser directoryChooser) { // Set title for DirectoryChooser directoryChooser.setTitle("Select Some Directories"); // Set Initial Directory directoryChooser.setInitialDirectory(new File(System.getProperty("user.home"))); } public static void main(String[] args) { Application.launch(args); } }
Vous pouvez définir le titre pour FileChooser/DirectoryChooser et les dossiers affichés par défaut lorsque l'utilisateur ouvre FileChooser/DirectoryChooser.
// Set title for FileChooser fileChooser.setTitle("Select Some Files"); // Set Initial Directory fileChooser.setInitialDirectory(new File(System.getProperty("user.home")));

ConfiguringFileChooserDemo.java
package org.o7planning.javafx.filechooser; import java.io.File; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextArea; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; import javafx.stage.Stage; public class ConfiguringFileChooserDemo extends Application { @Override public void start(Stage primaryStage) throws Exception { final FileChooser fileChooser = new FileChooser(); configuringFileChooser(fileChooser); TextArea textArea = new TextArea(); textArea.setMinHeight(70); Button button = new Button("Open File Chooser and select some files"); button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { fileChooser.showOpenDialog(primaryStage); } }); VBox root = new VBox(); root.setPadding(new Insets(10)); root.setSpacing(5); root.getChildren().addAll(button); Scene scene = new Scene(root, 400, 200); primaryStage.setTitle("JavaFX FileChooser (o7planning.org)"); primaryStage.setScene(scene); primaryStage.show(); } private void configuringFileChooser(FileChooser fileChooser) { // Set title for FileChooser fileChooser.setTitle("Select Some Files"); // Set Initial Directory fileChooser.setInitialDirectory(new File(System.getProperty("user.home"))); } public static void main(String[] args) { Application.launch(args); } }
Ensuite, vous pouvez configurer FileChooser en ajoutant des filtres pour déterminer quels types de fichiers seront affichés sur FileChooser. Par exemple créez 3 filtres, le filtre ALL affiche tous les types de fichiers, le filtre PNG affiche uniquement les images png et le filtre JPG affiche uniquement les images du format jpg.
// Add Extension Filters fileChooser.getExtensionFilters().addAll(// new FileChooser.ExtensionFilter("All Files", "*.*"), new FileChooser.ExtensionFilter("JPG", "*.jpg"), new FileChooser.ExtensionFilter("PNG", "*.png"));
The filters:

Le filtre ALL- Affiche tous les types de fichiers et dossiers.

Le filtre PNG ne monstre que les images png ou les dossiers.

Voyezr l'exemple complet
FilterFileChooserDemo.java
package org.o7planning.javafx.filechooser; import java.io.File; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.TextArea; import javafx.scene.layout.VBox; import javafx.stage.FileChooser; import javafx.stage.Stage; public class FilterFileChooserDemo extends Application { @Override public void start(Stage primaryStage) throws Exception { final FileChooser fileChooser = new FileChooser(); configuringFileChooser(fileChooser); TextArea textArea = new TextArea(); textArea.setMinHeight(70); Button button = new Button("Select some Pictures"); button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { fileChooser.showOpenDialog(primaryStage); } }); VBox root = new VBox(); root.setPadding(new Insets(10)); root.setSpacing(5); root.getChildren().addAll(button); Scene scene = new Scene(root, 400, 200); primaryStage.setTitle("JavaFX FileChooser (o7planning.org)"); primaryStage.setScene(scene); primaryStage.show(); } private void configuringFileChooser(FileChooser fileChooser) { // Set title for FileChooser fileChooser.setTitle("Select Pictures"); // Set Initial Directory fileChooser.setInitialDirectory(new File("C:/Users/tran/Pictures")); // Add Extension Filters fileChooser.getExtensionFilters().addAll(// new FileChooser.ExtensionFilter("All Files", "*.*"), // new FileChooser.ExtensionFilter("JPG", "*.jpg"), // new FileChooser.ExtensionFilter("PNG", "*.png")); } public static void main(String[] args) { Application.launch(args); } }
- TODO