p
u
b
l
i
c
i
t
é

FAQ Java GUIConsultez toutes les FAQ

Nombre d'auteurs : 35, nombre de questions : 153, dernière mise à jour : 2 juin 2015  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.


SommaireAWT et SwingJFileChooser (5)
précédent sommaire suivant
 

Ces boîtes de dialogue ne suivent pas la locale de votre système. En fait, chaque texte affiché dans ces boîtes de dialogue correspond à une ressource du UIManager. Il va donc falloir changer ces ressources.

Par exemple, pour le JFileChooser, vous pouvez dans votre code faire :

Code java : Sélectionner tout
1
2
3
4
5
6
UIManager.put("FileChooser.saveButtonText","Enregistrer"); 
UIManager.put("FileChooser.openButtonText","Ouvrir"); 
UIManager.put("FileChooser.cancelButtonText","Annuler"); 
UIManager.put("FileChooser.updateButtonText","Actualiser"); 
UIManager.put("FileChooser.helpButtonText","Aide"); 
UIManager.put("FileChooser.saveButtonToolTipText","Enregistre le fichier");

Mis à jour le 24 mars 2002

La classe FileSystemView, du package javax.swing.filechooser, permet de récupérer notamment le home directory et le répertoire par défaut. Sous Windows, ces deux répertoires correspondent au bureau et à "Mes documents". Vous pouvez donc facilement positionner le JFileChooser. Par exemple :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
FileSystemView vueSysteme = FileSystemView.getFileSystemView();  
//récupération des répertoires 
File defaut = vueSysteme.getDefaultDirectory();  
File home = vueSysteme.getHomeDirectory();  
//création et affichage des JFileChooser 
JFileChooser defautChooser = new JFileChooser(defaut); 
defautChooser.showOpenDialog(null); 
JFileChooser homeChooser = new JFileChooser(home); 
homeChooser.showOpenDialog(null);
Par contre, il n'existe pas de méthode toute faite pour se positionner de manière à voir tous les disques. Vous devrez faire comme ceci :

Code java : Sélectionner tout
1
2
3
4
5
  
JFileChooser chooser = new JFileChooser(); 
chooser.setCurrentDirectory(new File("/")); 
chooser.changeToParentDirectory(); 
chooser.showOpenDialog(null);

Mis à jour le 12 août 2004 bulbo

Pour filtrer les fichiers affichés par un JFileChooser vous devez utiliser un FileFilter (package javax.swing.filechooser). Cette classe abstraite définit deux méthodes :

  • accept(File) : cette méthode retourne un booléen indiquant si le fichier passé en paramètre est acceptable.
  • getDescription() : cette méthode retourne un String décrivant le filtre. C'est cette description qui sera affichée dans le JFileChooser.

Voici un exemple simple d'implémentation.

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class FiltreSimple extends FileFilter{ 
   //Description et extension acceptées par le filtre 
   private String description; 
   private String extension; 
   //Constructeur à partir de la description et de l'extension acceptées 
   public FiltreSimple(String description, String extension){ 
      if(description == null || extension ==null){ 
         throw new NullPointerException("La description (ou extension) ne peut être null."); 
      } 
      this.description = description; 
      this.extension = extension; 
   } 
   //Implémentation de FileFilter 
   public boolean accept(File file){ 
      if(file.isDirectory()) {  
         return true;  
      }  
      String nomFichier = file.getName().toLowerCase();  
  
      return nomFichier.endsWith(extension); 
   } 
      public String getDescription(){ 
      return description; 
   } 
}
L'utilisation se fait comme ceci :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
FileFilter java = new FiltreSimple("Fichiers Java",".java"); 
FileFilter classes = new FiltreSimple("Fichiers Class",".class"); 
FileFilter jar = new FiltreSimple("Fichiers JAR",".jar"); 
  
JFileChooser chooser = new JFileChooser("."); 
chooser.addChoosableFileFilter(java); 
chooser.addChoosableFileFilter(classes); 
chooser.addChoosableFileFilter(jar); 
chooser.showOpenDialog(null);
Vous pouvez télécharger cet exemple ci-dessous.

Ce filtre simple ne prend en compte qu'une seule extension. Vous pouvez regarder les liens ci-dessous pour un exemple de filtre "extensible" (capable de prendre en compte plusieurs extensions de fichiers).

Une dernière remarque : le filtrage ne se fait pas nécessairement sur une extension de fichier. Pour l'exemple, on a choisi cette possibilité, car c'est ce qui est le plus couramment rencontré. Vous pouvez tout à fait faire des filtres sur les tailles des fichiers, leurs dates de dernière modification, etc.

Mis à jour le 1er février 2005 Ioan

Voici un exemple d'implémentation de FileFilter (package javax.swing.filechooser) qui prend en compte plusieurs extensions. Quelques méthodes supplémentaires sont définies pour des facilités d'utilisation.

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public class FiltreExtensible extends FileFilter{ 
   //Description et extensions acceptées par le filtre 
   private String description; 
   private List<String> extensions; 
   //Constructeur à partir de la description 
   public FiltreExtensible(String description){ 
      if(description == null){ 
         throw new NullPointerException("La description ne peut être null."); 
      } 
      this.description = description; 
      this.extensions = new ArrayList<String>(); 
   } 
   //Implémentation de FileFilter 
   public boolean accept(File file){ 
      if(file.isDirectory() || extensions.size()==0) {  
         return true;  
      }  
      String nomFichier = file.getName().toLowerCase();  
      for(String extension : extensions){ 
         if(nomFichier.endsWith(extension)){ 
            return true; 
         } 
      } 
      return false; 
   } 
   public String getDescription(){ 
      StringBuffer buffer = new StringBuffer(description); 
      buffer.append(" ("); 
      for(String extension : extensions){ 
         buffer.append(extension).append(" "); 
      } 
      return buffer.append(")").toString(); 
   } 
   //Quelques méthodes utilitaires 
   public void setDescription(String description){ 
      if(description == null){ 
         throw new NullPointerException("La description ne peut être null."); 
      } 
      this.description = description; 
   } 
   public void addExtension(String extension){ 
      if(extension == null){ 
         throw new NullPointerException("Une extension ne peut être null."); 
      } 
      extensions.add(extension); 
   } 
   public void removeExtension(String extension){ 
      extensions.remove(extension); 
   } 
   public void clearExtensions(){ 
      extensions.clear(); 
   } 
   public List<String> getExtensions(){ 
      return extensions; 
   } 
}
Ce filtre peut s'utiliser comme ceci :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FiltreExtensible filtre = new FiltreExtensible("Fichiers Java"); 
filtre.addExtension(".java"); 
  
JFileChooser chooser = new JFileChooser("."); 
chooser.addChoosableFileFilter(filtre); 
chooser.showOpenDialog(null); 
  
filtre.addExtension(".class"); 
chooser.showOpenDialog(null); 
  
filtre.setDescription("Fichiers class"); 
filtre.removeExtension(".java"); 
chooser.showOpenDialog(null); 
  
filtre.setDescription("Tous les fichiers"); 
filtre.clearExtensions(); 
chooser.showOpenDialog(null);
Vous pouvez télécharger cet exemple ci-dessous.

À noter que depuis Java 6.0, vous pouvez faire ceci de manière standard en utilisant la classe FileNameExtensionFilter, qui permet de faire un filtre avec plusieurs extensions. Elle se crée de la manière suivante :

Code java : Sélectionner tout
FileFilter imagesFilter = new FileNameExtensionFilter("Images", "bmp", "gif", "jpg", "jpeg", "png", ...);

Ensuite, vous pouvez l'utiliser comme n'importe quel FileFilter.

Mis à jour le 1er février 2005 Ioan Pill_S

La classe JFileChooser permet au développeur de définir, avec la méthode setAccessory(Component), un composant accessoire. Ce composant peut se mettre à l'écoute des événements relatifs au JFileChooser grâce à un PropertyChangeListener.

Vous pouvez donc utiliser cet accessoire pour, par exemple, prévisualiser des images ou simplement pour avoir des informations détaillées sur le fichier sélectionné. Voici un exemple de rendu (vous pouvez télécharger l'implémentation ci-dessous) :

Mis à jour le 1er février 2005 Ioan

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2015 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique Java : Mickael Baron -