IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

JFileChooser pas très pratique


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Par défaut JFileChooser pas très pratique
    Bonjour à tous !!

    J'ai un tit problème avec JFileChooser... J'ai un document PDF à un emplacement précis sur mon disque, qui est généré à la volée. Il est sauvegardé dans un premier temps dans le répertoire de l'application. J'aimerai maintenant donner la possibilité à l'utilisateur de sauvegarder ce fichier ou bon lui semble, mais le JFileChooser a un comportement un peu bizarre...

    Ce que j'aimerai, c'est que l'utilisateur puisse choisir le répertoire ou il veut l'enregistrer... J'utilise donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    JFileChooser jfc = new JFileChooser();
    jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    jfc.addChoosableFileFilter(new PdfFilter());
    jfc.setAcceptAllFileFilterUsed( false );
     
    File catalog = new File( "catalog.pdf" );
    jfc.setSelectedFile( catalog );
     
    int returnVal = jfc.showSaveDialog( lgm.getCtrlView() );
     
    // test de returnVal et copie/déplacement du fichier 
    // ou log pour annulation ou erreur
    avec la classe PdfFilter telle que suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    package test;
    import java.io.File;
    import javax.swing.filechooser.FileFilter;
    public class PdfFilter extends FileFilter 
    {
        public boolean accept(File f) {
            if (f.isDirectory()) {
                return true;
            }
            return false;
        }
        public String getDescription()
        {
    	return "Fichiers PDF";
        }
    }
    (bon, je découvre, donc c'est peut-être pas top...)


    Maintenant, mes problèmes sont les suivants :

    1. Le filtrage n'est pas sélectionné par défaut... La combobox est vide... c'est un peu génant, puisque le but est de pouvoir "obliger" l'utilisateur à enregistrer dans un format PDF (de toute manière, le format final sera mis en pdf, mais ça me semble plus logique d'avoir un filtre n'autorisant que ce format...)

    2. J'arrive dans le répertoire par défaut avec mon FileChooser... (suis sur mac, donc répertoire de l'utilisateur courant). Lorsque le FileChooser s'affiche, j'ai bien "catalog.pdf" indiqué dans le textInput "Enregistrer sous". Maintenant je double-clique sur un répertoire (admettons "Desktop") pour entrer dans ce dernier, et hop, de "catalog.pdf", je passe à "Desktop" dans le textInput... Alors que j'aimerai bien que le contenu du textInput ne change pas, sauf si c'est l'utilisateur qui le modifie...


    Les suggestions sont les bienvenues

    D'avance merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu es en mode "Directory", où l'objectif consiste à choisir un répertoire et non pas un dossier, et non pas un fichier. D'où ce comportement qui peut sembler étrange...

    En clair, supprimes cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    a++

  3. #3
    Membre chevronné Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Par défaut
    Hello !!

    Merci pour ta réponse, c'est correct. En supprimant la ligne spécifiée, le comportement est celui que j'escomptais. Il ne me change plus le nom du fichier, ça reste "catalog.pdf".

    Reste à comprendre le pourquoi du comment concernant la liste des filtres et tout sera réglé. Je continuerai les investigations demain et si je trouve une réponse je n'hésiterai pas à la poster sur le thread.

    Merci encore ;-)

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jfc.setFileFilter(new PdfFilter());
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jfc.addChoosableFileFilter(new PdfFilter());

  5. #5
    Membre chevronné Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Par défaut
    Hello !!

    Alors après quelques tests, il semblerai que le problème ne vienne pas de addChoosableFileFilter ou setFilter car le résultat est le même au final. Le problème venait du fait que j'appelais d'abord la méthode addChoosableFileFilter( new PdfFilter() ), et seulement après la méthode setAcceptAllFileFilterUsed( false ).

    En gros, la sélection restait sur une ligne vide qui aurai pu correspondre à "All files" plutôt que de sélectionner mon filtre personnalisé.

    Par contre, je n'arrive pas à faire fonctionner mon filtre correctement, ou alors je n'ai pas compris son intérêt... Un FileFilter devrai itérer sur tous les fichiers / dossiers du répertoire en cours et n'afficher que ceux qui correspondent au filtre, et ce n'est pas le cas... Il continue à m'afficher tous les fichiers du répertoire courant alors qu'il serait sensé n'afficher que ceux qui ont une extension ".pdf".

    Le code de mon filtre est le suivant :

    PdfFilter.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    public class PdfFilter extends FileFilter 
    {
        public boolean accept(File f) 
        {
            if (f.isDirectory()) 
    	{
                return true;
            }
    	String extension = ExtensionFilter.getExtension( f );
    	if( extension != null )
    	{
    	    if( extension.equals( ExtensionFilter.pdf ) )
    	    {
    		System.out.println( "it 's a pdf..." );
    		return true;
    	    }
    	}
            return false;
        }
     
        public String getDescription()
        {
    	return "Fichiers PDF";
        }
    }
    ExtensionFilter.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public class ExtensionFilter 
    {
        public final static String pdf = "pdf";
     
        public static String getExtension(File f) {
            String ext = null;
            String s = f.getName();
            int i = s.lastIndexOf('.');
     
            if (i > 0 &&  i < s.length() - 1) {
                ext = s.substring(i+1).toLowerCase();
            }
            return ext;
        }
    }
    La méthod ExtensionFilter.getExtension va simplement me retourner l'extension du fichier. Lorsqu'il tombe sur un fichier pdf, le filtre il m'affiche bien "it's a pdf..." mais tous les fichiers sont listés quand même... pas tout compris...


    [EDIT]
    ou est-ce un problème inhérent à mac OS ?? Dès que j'ai l'occasion je teste sur une machine windows histoire de voir si le comportement est le même...
    [/EDIT]

  6. #6
    Membre chevronné Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Par défaut
    Ok, après test, le problème qui se pose sur ma machine (macbook pro avec mac osx) ne se pose pas sur la machine de mon amie (winxp). C'est donc bien un problème de système d'exploitation.

    Je vous remercie tous pour vos suggestions et votre aide précieuse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Debug] [Trigger] erreur d'exe pas très précise
    Par viena dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/08/2005, 11h36
  2. [Timer]Timer pas très précis
    Par harold63 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 25/07/2005, 08h36
  3. 2 SELECT Qui ne s'entendent pas très bien entre eux :(
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/08/2004, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo