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:
Lorsque l'utilisateur navigue vers un répertoire choisit un fichier et clique sur «Ouvrir»
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:
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:
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:
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:
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:
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: