Besoin FileDialog avec un filtre par type de fichier en Java
J'ai un JDialog avec un bouton/textfield pour l'utilisateur de sélectionner un fichier. Voici le code:
FileDialog chooser = new FileDialog(this, "Save As", FileDialog.SAVE );
String startDir = saveAsField.getText().substring( 0, saveAsField.getText().lastIndexOf('\\') );
chooser.setDirectory(startDir);
chooser.setVisible(true);
String fileName = chooser.getFile();
Mon problème est qu'au lieu de voir Tous les Fichiers de filtre, je veux fournir un filtre personnalisé, par exemple pour les documents Word ou quelque chose. J'ai le programme d'installation personnalisé FilenameFilter à l'aide de setFilenameFilter(), mais ça ne semble pas fonctionner. J'ai remarqué qu'il est dit dans la doc que le filtre ne fonctionne pas dans Windows (ce qui s'exécute dans Windows XP/Vista/7). Voici mon de la mise en œuvre du filtre:
chooser.setFilenameFilter( new geFilter() );
public class geFilter implements FilenameFilter {
public boolean accept(File dir, String name) {
return name.endsWith( ".doc" ) || name.endsWith( ".docx" );
}
}
Je fais quelque chose de mal ici? Aussi, je veux une description apparaissent dans la zone, comme "Microsoft Word (*.doc *.docx)" mais je ne suis pas sûr de la façon de le faire.
Toute aide est appréciée.
OriginalL'auteur Morinar | 2009-08-06
Vous devez vous connecter pour publier un commentaire.
AWT n'est pas vraiment le moyen privilégié de l'écriture Java applications à interface graphique de ces jours. Le soleil semble surtout avoir abandonné. Les deux plus populaires sont les options de Swing et SWT. Donc je pense qu'ils n'ont pas vraiment de développer l'Api très largement pour ajouter des fonctionnalités modernes. (euh, pour répondre à votre question: Non, vous ne semblent pas être en mesure de le faire avec AWT)
Swing a l'avantage qu'il est vraiment write-once-run-partout et il peut regarder exactement la même chose partout. Il y a le " Look & Sent qui essaient de faire de la Balançoire look natif, certains sont meilleurs que d'autres (Mac n'est pas terrible, Windows est ok, GTK n'est pas). Encore, si vous voulez une application qui ressemble et agit EXACTEMENT de la même façon partout, Balançoire va vous permettre de le faire. De Plus il fonctionne out-of-the-box sans aucune bibliothèques supplémentaires. La Performance n'est pas idéal.
Swing du JFileChooser vous permettra de faire ce que vous voulez. Créer une sous-classe de FileFilter et appel
setFileFilter
sur leJFileChooser
.SWT prend le write-once-run-n'importe où à l'extrême opposé. Vous avez encore une base de code que vous écrivez contre, mais en fait, il utilise le natif de widgets sur chaque plate-forme de sorte qu'il ressemble généralement à une application native (pas parfait partout, mais toujours impressionnant). C'est rapide et assez fiable à mon expérience. Eclipse (et d'autres personnalités du logiciel) utilise SWT donc c'est assez lourd à utiliser. Mais il nécessite une plate-forme spécifique des Pots et des Dll.
Aucune infraction, mais le JFileChooser sur Mac OS X semble laid on se sent honteux.
Je ne pense pas que la honte est le droit de l'émotion. Swing (out-of-the-box) n'a pas l'air très bien n'importe où (JFileChooser et tous les autres widgets inclus), bien que Mac est probablement la moins mauvaise. SWT est mieux, mais plus (développeur) le travail. Il n'est pas clair ce que plate-forme de l'OP, mais je pense que tout cela est déjà implicite par ma réponse.
OriginalL'auteur Adam Batkin
puisque vous êtes à l'aide de JDialog, c'est un swing de classe pourquoi pas à l'aide de JFileChooser?
FileNameExtensionFilter est une belle version 6 de Java de la classe qui fait exactement ce que vous voulez.
OriginalL'auteur dfa
Je suis aussi en train d'essayer de le faire. Je veux utiliser FileDialog au lieu de JFileChooser.
J'ai trouvé la réponse ici: http://www.rgagnon.com/javadetails/java-0247.html
Il dit que "la Victoire de la plateforme, le setFilenameFilter méthode ne fonctionne pas. Nous devons utiliser le setFile plutôt la méthode pour définir un filtre."
Il y a le code source du lien spécifié.
J'ai testé et ça fonctionne:
OriginalL'auteur ceklock
Vous pouvez appeler le natif de Windows Filedialog (CFileDialog) avec JNI. Les filtres peuvent être définis pour CFileDialog facilement.
J'ai écrit une simple classe wrapper pour CFileDialog il y a plusieurs mois, Si vous êtes intéressé, vous pouvez obtenir le code source et les binaires de
Xfiledialog projet sur google code
OriginalL'auteur stevpan
Si jamais vous utilisez JavaFX 2, le FileChooser classe permettra de faire exactement ce dont vous avez besoin, sans aucun de JFileChooser/FileDialog problèmes. Vous pouvez également intégrer des JavaFX 2 composants à l'intérieur des applications Swing, mais vous avez besoin JavaFX.
Exemple:
OriginalL'auteur ceklock
Suffit d'utiliser
setFilenameFilter
méthode de laFileDialog
instancefd
:OriginalL'auteur Pixel