64 votes

JFileChooser.showSaveDialog (...) - Comment définir le nom de fichier suggéré

Il semble qu'il manque un élément bouffi à JFileChooser : un moyen de suggérer le nom du fichier lors de l'enregistrement d'un fichier (élément sélectionné pour être remplacé dès que l'utilisateur commence à taper).

Y a-t-il un moyen de contourner ceci?

115voto

bruno conde Points 28120

Si je vous ai bien compris, vous devez utiliser la méthode setSelectedFile .

 JFileChooser jFileChooser = new JFileChooser();
jFileChooser.setSelectedFile(new File("fileToSave.txt"));
jFileChooser.showSaveDialog(parent);
 

Le fichier n'a pas besoin d'exister.

EDIT: Si vous passez un fichier avec un chemin absolu, JFileChooser essaiera de se positionner dans ce répertoire (s'il existe).

4voto

Erik Martino Points 793

setSelectedFile ne fonctionne pas avec les répertoires mentionnés ci-dessus, une solution est

     try {
        FileChooserUI fcUi = fileChooser.getUI();
        fcUi.setSelectedFile(defaultDir);
        Class<? extends FileChooserUI> fcClass = fcUi.getClass();
        Method setFileName = fcClass.getMethod("setFileName", String.class);
        setFileName.invoke(fcUi, defaultDir.getName());
    } catch (Exception e) {
        e.printStackTrace();
    }
 

Malheureusement, setFileName n'est pas inclus dans l'interface utilisateur, d'où la nécessité de l'appeler dynamiquement. Seulement testé sur mac.

1voto

Aaron Digulla Points 143830

Si cela ne fonctionne pas, voici une solution de contournement:

 dialog.getUI().setFileName( name )
 

Mais vous devriez vérifier si le mode de sélection est FILES_ONLY ou FILES_AND_DIRECTORIES . S'il s'agit de DIRECTORIES_ONLY , alors setSelectedFile() supprimera le nom du fichier.

-1voto

Jorge Yago Points 1

Génial! Fonctionne parfaitement sous Windows avec Java 1.6.35. Seul un petit changement dans mon cas:

 FileChooserUI fcUi = jFileChooser.getUI();
Class<? extends FileChooserUI> fcClass = fcUi.getClass();
Method setFileName = fcClass.getMethod("setFileName", String.class);
setFileName.invoke(fcUi, defaultDirectoryName);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X