Comment utiliser un filtre de fichiers dans un JFileChooser ?

samedi 17 mars 2001

Cet article explique comment mettre en place un filtre de fichiers dans un JFileChooser, à partir de leur extension. En effet, cette fonction n’est pas implémentée de manière efficace par défaut, et il nous faudra créer notre propre classe pour un résultat convenable.
Nous allons ensuite créer un JFileChooser et lui assigner notre FileFilter appellé FiltreExtension.

Voici donc le code source de la classe commenté:

public class FiltreExtension extends javax.swing.filechooser.FileFilter
{
// 2 chaînes qui contiendront respectivementl’entension du fichier (de la forme "jpg", "txt", etc…) et la descritpion
// par exemple "Fichier JPEG" ou "Fichier Texte Brut".
String extension;
String description;

// Notre constructeur qui admet donc comme arguments l’extension souhaitée ainsi que la description que l’on lui associe
public FiltreExtension(String extension, String description)
{
// on n’a ainsi pas besoin (on ne doit pas) inclure le "." (point) dans le libellé de l’extension
if (extension.indexOf(‘.’) == -1)
extension = "." + extension;
// on assimile les Strings du départ (variables de classe) aux Strings fournis comme argument au constructeur (variableslocales)
this.extension = extension;
this.description = description;
}

public boolean accept(File fichier)
{
// vérifier si le le fichier finit avec l’extension que nous avons spécifié dans le constructeur, et, dans ce cas "accepter" de l’afficher
// dans la fenêtre du JFileChooser
if (fichier.getName().endsWith(extension))
return true;
// les répertoires aussi doivent êtreaffichés dans la fenêtre du JFileChooser
else if (fichier.isDirectory())
return true;
return false;
}

public String getDescription()
{
// la description du fichier, que l’on associe à son extension, on a un affichage du type: "Fichier JPEG (.jpg)"
return this.description + "(
" + extension + ")";
}
}

Une fois ce code écrit dans un fichier du nom de "FiltreExtension.java", nous pouvons incorporer ce fichier dans nos projets Java et l’utiliser.
Pour l’utiliser nous devons créer un JFileChooser et lui assigner un nouveau FileFilter.
Voici la procédure:

1- Créons un JFileChooser pour commencer:

JFileChooser jfc = new JFileChooser();

2 - Définissons le répertoire courant ua répertoired’exécution du programme (optionnel):

jfc.setCurrentDirectory(new File("."));

3 - Assignons le FileFilter:

jfc.addChoosableFileFilter(new FiltreExtension("jpg", "Fichier JPEG"));
jfc.addChoosableFileFilter(new FiltreExtension("bmp", "Fichier Bitmap"));
jfc.addChoosableFileFilter(new FiltreExtension("gif", "Fichier GIF"));
jfc.addChoosableFileFilter(new FiltreExtension("png", "Fichier PNG"));

4 - récupérer le fichier que l’utilisateur a choisi:

int resultat = jfc.showOpenDialog(this);
if (resultat == JFileChooser.APPROVE_OPTION)
{
// code à exécuter comme par exemple:
File fichier;
fichier = jfc.getSelectedFile();
// suite du code…
}

Et voici ce que ça donne en action :

FileChooser

Tutoriel distribué pour le FAQ Java de Java-France www.java-france.com / www.jgflsoft.com
Réédité pour Valhalla GFBLOG.
Ecrit à Montpellier le 17 mars 2001

Cet article explique comment mettre en place un filtre de fichiers dans un JFileChooser, à partir de leur extension. En effet, cette fonction n’est pas implémentée de manière efficace par défaut, et il nous faudra créer notre propre classe pour un résultat convenable.
Nous allons ensuite créer un JFileChooser et lui assigner notre FileFilter appellé FiltreExtension.

Voici donc le code source de la classe commenté:

public class FiltreExtension extends javax.swing.filechooser.FileFilter
{
// 2 chaînes qui contiendront respectivementl’entension du fichier (de la forme "jpg", "txt", etc…) et la descritpion
// par exemple "Fichier JPEG" ou "Fichier Texte Brut".
String extension;
String description;

// Notre constructeur qui admet donc comme arguments l’extension souhaitée ainsi que la description que l’on lui associe
public FiltreExtension(String extension, String description)
{
// on n’a ainsi pas besoin (on ne doit pas) inclure le "." (point) dans le libellé de l’extension
if (extension.indexOf(‘.’) == -1)
extension = "." + extension;
// on assimile les Strings du départ (variables de classe) aux Strings fournis comme argument au constructeur (variableslocales)
this.extension = extension;
this.description = description;
}

public boolean accept(File fichier)
{
// vérifier si le le fichier finit avec l’extension que nous avons spécifié dans le constructeur, et, dans ce cas "accepter" de l’afficher
// dans la fenêtre du JFileChooser
if (fichier.getName().endsWith(extension))
return true;
// les répertoires aussi doivent êtreaffichés dans la fenêtre du JFileChooser
else if (fichier.isDirectory())
return true;
return false;
}

public String getDescription()
{
// la description du fichier, que l’on associe à son extension, on a un affichage du type: "Fichier JPEG (.jpg)"
return this.description + "(
" + extension + ")";
}
}

Une fois ce code écrit dans un fichier du nom de "FiltreExtension.java", nous pouvons incorporer ce fichier dans nos projets Java et l’utiliser.
Pour l’utiliser nous devons créer un JFileChooser et lui assigner un nouveau FileFilter.
Voici la procédure:

1- Créons un JFileChooser pour commencer:

JFileChooser jfc = new JFileChooser();

2 - Définissons le répertoire courant ua répertoired’exécution du programme (optionnel):

jfc.setCurrentDirectory(new File("."));

3 - Assignons le FileFilter:

jfc.addChoosableFileFilter(new FiltreExtension("jpg", "Fichier JPEG"));
jfc.addChoosableFileFilter(new FiltreExtension("bmp", "Fichier Bitmap"));
jfc.addChoosableFileFilter(new FiltreExtension("gif", "Fichier GIF"));
jfc.addChoosableFileFilter(new FiltreExtension("png", "Fichier PNG"));

4 - récupérer le fichier que l’utilisateur a choisi:

int resultat = jfc.showOpenDialog(this);
if (resultat == JFileChooser.APPROVE_OPTION)
{
// code à exécuter comme par exemple:
File fichier;
fichier = jfc.getSelectedFile();
// suite du code…
}

Et voici ce que ça donne en action :

FileChooser

Tutoriel distribué pour le FAQ Java de Java-France www.java-france.com / www.jgflsoft.com
Réédité pour Valhalla GFBLOG.
Ecrit à Montpellier le 17 mars 2001