Le Tutoriel de JavaFX FileChooser et DirectoryChooser

View more categories:

1- JavaFX FileChooser, DirectoryChooser

FileChooser permet aux utilisateurs de naviguer dans le système de fichiers pour choisir un ou plusieurs fichiers. Une composition similaire est  DirectoryChooser 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

2- Exemple avec FileChooser

L'exemple suivant, lorsqu l'utilisateur clique sur le button, un FileChooser affichera à sélectionner le fichier et l'ouvre.
 
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);
    }

}

3- Exemple DirectoryChooser

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);
    }

}

4- Configurer pour FileChooser, DirectoryChooser

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);
    }

}

5- Définir les filtres de foudre FileChooser

Ensuite vous pouvez configurer FileChooser en ajoutant des filtres pour déterminer quels types de fichiers seront affichés sur FileChooser. Par exemple créer 3 filtres,le filtre  TOUS affichent tous les types de fichiers, le filtre PNG 
affiche uniquement les images png,et le filtre JPG affiche uniquement les images 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 TOUS - Affiche tous les types de fichiers et dossiers.
Le filtre PNG ne monstre que les images png ou les dossiers.
Voir 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);
  }

}

6- Exemple Save File

  • TODO

View more categories: