Java Swing - Exemple avec JFileChooser

Java Swing - exemple JFileChooser

JFileChooser est un moyen rapide et facile d'inviter l'utilisateur à choisir un fichier ou un emplacement d'enregistrement de fichier. Voici quelques exemples simples d'utilisation de cette classe.

JFileChooser a 6 constructeurs:

  • JFileChooser() - constructeur vide qui pointe vers le répertoire par défaut de l'utilisateur

  • JFileChooser(String) - utilise le chemin donné

  • JFileChooser(File) - utilise le fichier donné comme chemin

  • JFileChooser(FileSystemView) - utilise le FileSystemView donné

  • JFileChooser(String, FileSystemView) - utilise le chemin donné et lesFileSystemView

  • JFileChooser(File, FileSystemView) - utilise le répertoire courant donné et lesFileSystemView

Toutes les différentes manières d'appeler le constructeurJFileChooser

//JFileChooser jfc;
//String path = "C:\\Users\\Public";
//File file = new File("C:\\Users\\Public");
//FileSystemView fsv = FileSystemView.getFileSystemView();

//jfc = new JFileChooser();
//jfc = new JFileChooser(path);
//jfc = new JFileChooser(file);
//jfc = new JFileChooser(fsv);
//jfc = new JFileChooser(path, fsv);
//jfc = new JFileChooser(file, fsv);

La préférence personnelle de l’écrivain est de prendre en compte lesFileSystemView. Dans les exemples ci-dessous, nous utilisonsFileSystemView.getFileSystemView() et le pointons vers le répertoire personnel viagetHomeDirectory(). Ce processus se traduit par un type de fichier. En d'autres termes, nous utilisons le constructeurJFileChooser(File) en tenant compte desFileSystemView.

1. afficher * Dialogue () -Open or save a file

Exemple d'utilisation desJFileChooser pour obtenir le chemin absolu du fichier que l'utilisateur souhaite ouvrir ou pour obtenir l'emplacement où l'utilisateur souhaite enregistrer le fichier:

FileChooser1.java

package com.example.jfileChooser;

import java.io.File;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;

public class FileChooser1 {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());

        int returnValue = jfc.showOpenDialog(null);
        // int returnValue = jfc.showSaveDialog(null);

        if (returnValue == JFileChooser.APPROVE_OPTION) {
            File selectedFile = jfc.getSelectedFile();
            System.out.println(selectedFile.getAbsolutePath());
        }

    }

}

Notez que les deux méthodesshowOpenDialog() etshowSaveDialog() sont similaires, ce qui fait la différence, c'est la façon dont le développeur gère chacune d'elles. Pour des raisons de lisibilité, je ne suggérerais pas de mélanger les deux méthodes.

Sortie:

swing-jfilechooser-4a

Lorsque l'utilisateur navigue vers un répertoire choisit un fichier et clique sur «Ouvrir»

swing-jfilechooser-4b

Sortie:

C:\Users\Public\Pictures\pollock.she-wolf.jpg

2. setFileSelectionMode (int) -Select files or directories

Avec cette méthode, nous pouvons limiter l'utilisateur à sélectionner les répertoires uniquement (JFileChooser.DIRECTORIES_ONLY) ou les fichiers uniquement (JFileChooser.FILES_ONLY) ou les fichiers et répertoires (JFileChooser.FILES_AND_DIRECTORIES). La valeur par défaut estFILES_ONLY. Voici un exemple qui implémenteJFileChooser.DIRECTORIES_ONLY:

FileChooser2.java

package com.example.jfileChooser;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;

public class FileChooser2 {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        jfc.setDialogTitle("Choose a directory to save your file: ");
        jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

        int returnValue = jfc.showSaveDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            if (jfc.getSelectedFile().isDirectory()) {
                System.out.println("You selected the directory: " + jfc.getSelectedFile());
            }
        }

    }

}

Sortie:

swing-jfilechooser-4c

You selected the directory: C:\Users\Public\Pictures

3. setMultiSelectionEnabled (booléen) -Allow multiple selections

Un exemple où la sélection multiple est activée. L'utilisateur sélectionne plusieurs fichiers et le programme imprime les noms:

FileChooser3.java

package com.example.jfileChooser;

import java.io.File;
import java.util.Arrays;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;

public class FileChooser3 {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        jfc.setDialogTitle("Multiple file and directory selection:");
        jfc.setMultiSelectionEnabled(true);
        jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);

        int returnValue = jfc.showOpenDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            File[] files = jfc.getSelectedFiles();
            System.out.println("Directories found\n");
            Arrays.asList(files).forEach(x -> {
                if (x.isDirectory()) {
                    System.out.println(x.getName());
                }
            });
            System.out.println("\n- - - - - - - - - - -\n");
            System.out.println("Files Found\n");
            Arrays.asList(files).forEach(x -> {
                if (x.isFile()) {
                    System.out.println(x.getName());
                }
            });
        }

    }

}

Sortie:

swing-jfilechooser-4d

Directories found

Camera Roll
Saved Pictures

- - - - - - - - - - -

Files Found

autumn_rhythm-pollock1.jpg
kuNUfO.jpg
mona.jpg

4. Filtres -Limit the set of files shown to the user

Il est toujours pratique de limiter la sélection des utilisateurs aux besoins du programme. Si, par exemple, votre programme nécessite des images png et gif, il serait judicieux de limiter la sélection de l'utilisateur à cela. L'exemple ci-dessous montre comment y parvenir en utilisant unFileNameExtensionFilter personnalisé:

FileChooser4.java

package com.example.jfileChooser;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.filechooser.FileSystemView;

public class FileChooser4 {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        jfc.setDialogTitle("Select an image");
        jfc.setAcceptAllFileFilterUsed(false);
        FileNameExtensionFilter filter = new FileNameExtensionFilter("PNG and GIF images", "png", "gif");
        jfc.addChoosableFileFilter(filter);

        int returnValue = jfc.showOpenDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            System.out.println(jfc.getSelectedFile().getPath());
        }

    }

}

Sortie:

swing-jfilechooser-4e

Comme vous pouvez le voir, l'utilisateur n'est pas autorisé à choisir autre chose. Le répertoire illustré ci-dessus contient également d'autres types d'images, mais seuls gif et png sont affichés à l'utilisateur.

Le répertoire ressemble à ceci:

swing-jfilechooser-4f

5. Utilisation de showDialog ()

Si vous devez personnaliser le bouton d'approbation, utilisez la méthodeshowDialog(). Voici un exemple d'utilisation:

FileChooser5.java

package com.example.inputDialog;

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;

public class FileChooser5 {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());
        jfc.setDialogTitle("Custom button");

        int returnValue = jfc.showDialog(null, "A button!");
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            System.out.println(jfc.getSelectedFile().getPath());
        }

    }

}

Sortie:

swing-jfilechooser-4g

Note
Il existe une méthode dansJFileChooser appeléesetApproveButtonText(String). Le problème avec cette méthode est qu'elle ne fonctionne que pourshowOpenDialog(). Il est recommandé d'utiliser lesshowDialog() en remplacement desshowSaveDialog() lorsqu'un bouton personnalisé est nécessaire.

Vous devez également vérifier les méthodes les plus simples et les plus utilisées pour écrire et lire des fichiers: