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 (obligé de sélect 2x le fichier pour fermer)


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Par défaut JFileChooser (obligé de sélect 2x le fichier pour fermer)
    Bonjour,

    Je dois ouvrir un JFileChooser pour sélectionner un fichier PDF. Tout fonctionnait nikel mais depuis hier je suis obligé de sélectionner 2x le fichier pour que le JFileChooser se ferme !

    J'appuie sur le bouton qui ouvre le JFileChooser, mon Chooser s'ouvre et n'affiche que les documents PDF, tout est ok. Je sélectionne un fichier PDF, clique sur OPEN et le JFileChooser réaparait : Je suis obligé de resélectionner le doc PDF et recliker sur OPEN et ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File source = source();
    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
     
    public File source() {
            JFileChooser chooser = new JFileChooser();
     
            //Filtrer le choix seulement aux documents PDF
            FileMasque pdf = new FileMasque(new String("pdf"), "Fichiers PDF");
            chooser.addChoosableFileFilter(pdf);
            chooser.setCurrentDirectory(pdfpath);
     
            if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                return chooser.getSelectedFile();
            } else {
                return null;
            }
        }
    Ce bug est-il connu ? Comment faire pour le réparer..

    MERCI

    greg

  2. #2
    Membre confirmé
    Avatar de jak0
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 272
    Par défaut
    Tu n'as pas une boucle autour du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File source = source();
    ???

    Et par contre tu pourrais peut-être m'aidé. Tu pourrai m'indiquer comment tu créer ta classe FileMask stp ? j'ai déjà essayé de faire un FileFilter, sans succès... Si tu pouvais me donner quelques pistes ca serait bien cool ++

  3. #3
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Par défaut
    Salut,

    non je n'ai pas de boucle, je l'appelle qu'une seule fois !

    voici la classe, en fait je l'ai trouvée sur le net

    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
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
     
     
    import java.io.File;
    import java.util.Hashtable;
    import java.util.Enumeration;
    import javax.swing.filechooser.*;
     
    /** Implementation pratique de FileFilter filtrant tout les
    * fichiers a l'exception de ceux dont les extentions sont connues.
    * Les extentions sont du type ".foo", typiquement utilisés sous
    * Windows et Unix, mais pas sur Macinthosh. Dans ce cas, les extentions sont
    * ignorées.
    * Example - cree un nouveau filtre filtrant tout les fichiers sauf
    * les gif et jpg, fichiers image:
    *
    * JFileChooser chooser = new JFileChooser();
    *
    * FileMasque filter = new FileMasque(new String{"gif", "jpg"}, "Images JPEG & GIF") chooser.addChoosableFileFilter(filter);
    * chooser.showOpenDialog(this);
    *
    * @version 1.16 07/26/04
    * @author Jeff Dinkins
    */
    public class FileMasque extends FileFilter
    {
            private static String TYPE_UNKNOWN = "Type Unknown";
            private static String HIDDEN_FILE = "Hidden File";
            private Hashtable filters = null;
            private String description = null;
            private String fullDescription = null;
            private boolean useExtensionsInDescription = true;
        /**
    * Cree un filtre fichier. Si aucun filtre n'est ajouter,
    * affiche tous les fichiers sans restriction.
    *
    * @see #addExtension
    */
        public FileMasque()
        {
            this.filters = new Hashtable();
        }
        /**
    * Cree un filtre fichier filtrant tout les fichier dont l'extention
    * n'est pas specifiee.
    * Example: new ExampleFileFilter("jpg");
    *
    * @see #addExtension
    */
        public FileMasque(String extension)
        {
            this(extension,null);
        }
        /**
    * Creates a file filter that accepts the given file type.
    * Example: new ExampleFileFilter("jpg", "JPEG Image Images");
    *
    * Note that the "." before the extension is not needed. If
    * provided, it will be ignored.
    *
    * @see #addExtension
    */
        public FileMasque(String extension, String description)
        {
            this();
            if(extension!=null) addExtension(extension);
             if(description!=null) setDescription(description);
        }
        /**
    * Creates a file filter from the given string array.
    * Example: new ExampleFileFilter(String {"gif", "jpg"});
    *
    * Note that the "." before the extension is not needed adn
    * will be ignored.
    *
    * @see #addExtension
    */
        public FileMasque(String[] filters)
        {
            this(filters, null);
        }
        /**
    * Cree un filtre fichier a partir du tableau de String donne et de la description.
    * Example: new ExampleFileFilter(String {"gif", "jpg"}, "Gif and JPG Images");
    *
    * Noter que le "." avant l'extention n'est pas requis et sera ignoré.
    *
    * @see #addExtension
    */
        public FileMasque(String[] filters, String description)
        {
            this();
            for (int i = 0; i < filters.length; i++)
            {
             addExtension(filters[i]);// Ajoute les filtres un a un
            }
             if(description!=null) setDescription(description);
        }
        /**
    * Retourne true si le fichier doit etre montre dans le repertoire,
    * false s'il ne doit pas l'etre.
    *
    * Les fichier commencant par "." sont ignores.
    *
    * @see #getExtension
    * @see FileFilter#accepts
    */
        public boolean accept(File f)
        {
            if(f != null)
            {
             if(f.isDirectory())
             {
                    return true;
             }
             String extension = getExtension(f);
             if(extension != null && filters.get(getExtension(f)) != null)
             {
                    return true;
             };
            }
            return false;
        }
        /**
    * Retourne l'extention du nom du fichier.
    *
    * @see #getExtension
    * @see FileFilter#accept
    */
         public String getExtension(File f)
         {
            if(f != null)
            {
             String filename = f.getName();
             int i = filename.lastIndexOf('.');
             if(i>0 && i<filename.length()-1)
             {
                    return filename.substring(i+1).toLowerCase();
             };
            }
            return null;
        }
        /**
    * Adds a filetype "dot" extension to filter against.
    *
    * Par example: le code suivant crera un filtre qui filtrera
    * tout les fichier a l'exception des ".jpg" et ".tif":
    *
    * FileMasque filter = new FileMasque();
    * filter.addExtension("jpg");
    * filter.addExtension("tif");
    *
    * Noter que le "." avant les extention n'est pas requis et sera ignore.
    */
        public void addExtension(String extension)
        {
            if(filters == null)
            {
             filters = new Hashtable(5);
            }
            filters.put(extension.toLowerCase(), this);
            fullDescription = null;
        }
        /**
    * Retourne une representation humainement lisible de la description de ce filtre. Par
    * example: "JPEG and GIF Image Files (*.jpg, *.gif)"
    *
    * @see setDescription
    * @see setExtensionListInDescription
    * @see isExtensionListInDescription
    * @see FileFilter#getDescription
    */
        public String getDescription()
        {
            if(fullDescription == null)
            {
             if(description == null || isExtensionListInDescription())
             {
                     fullDescription = description==null ? "(" : description + " (";    // Construit la description a partir des extentions.
                    Enumeration extensions = filters.keys();
                    if(extensions != null)
                    {
                     fullDescription += "." + (String) extensions.nextElement();
                     while (extensions.hasMoreElements())
                     {
                            fullDescription += ", ." + (String) extensions.nextElement();
                     }
                    }
                    fullDescription += ")";
             }
             else
             {
                    fullDescription = description;
             }
            }
            return fullDescription;
        }
        /**
    * Definit la description du filtre. Par
    * example: filter.setDescription("Gif and JPG Images");
    *
    * @see setDescription
    * @see setExtensionListInDescription
    * @see isExtensionListInDescription
    */
        public void setDescription(String description)
        {
            this.description = description;
            fullDescription = null;
        }
        /**
    * Determine quelque soit la liste d'extension (.jpg, .gif, etc) s'il
    * doit afficher la description des filtres.
    *
    * N'est approprie que si la description a ete donee dans le constructeur
    * ou par l'utilisation de setDescription();
    *
    * @see getDescription
    * @see setDescription
    * @see isExtensionListInDescription
    */
        public void setExtensionListInDescription(boolean b)
        {
            useExtensionsInDescription = b;
            fullDescription = null;
        }
        /**
    * Retourne quelque soit la liste d'extension (.jpg, .gif, etc) s'il
    * doit afficher la description des filtres.
    *
    * N'est approprie que si la description a ete donee dans le constructeur
    * ou par l'utilisation de setDescription();
    *
    * @see getDescription
    * @see setDescription
    * @see setExtensionListInDescription
    */
        public boolean isExtensionListInDescription()
        {
            return useExtensionsInDescription;
        }
    }
    En espérant que ça puisse t'aider..

  4. #4
    Membre confirmé
    Avatar de jak0
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 272
    Par défaut
    Merci beacoup pour la source, c'est nickel !!!
    Par contre, si tu n'as pas de boucle, je ne comprend pas trop ce qu'il se passe.
    Si tu met un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("on passe par là après le JFileChooser");
    juste après le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File source = source();
    Il est affiché une ou deux fois ???

  5. #5
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Par défaut
    Il l'affiche 2x le C** ^^

    pourtant j'appelle 2x cette méthode et la deuxième fois ça me fait pas ce coups. Voici mes trois codes..

    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
    27
    28
    29
    30
    31
    32
     
    public File source(int index) {
            switch (index) {
            case 1: {
                JFileChooser chooser = new JFileChooser();
                //Filtrer le choix seulement aux documents PDF
                FileMasque pdf = new FileMasque(new String("pdf"), "Fichiers PDF");
                chooser.addChoosableFileFilter(pdf);
                chooser.setCurrentDirectory(pdfpath);
     
                if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                    return chooser.getSelectedFile();
                } else {
                    return null;
                }
            }
            case 2: {
                JFileChooser chooser = new JFileChooser();
                chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                chooser.setCurrentDirectory(pdfpath);
                chooser.setSelectedFile(null);
     
                if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                    return chooser.getSelectedFile();
                } else {
                    return null;
                }
            }
            default:
                return null;
            }
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void BSourceFichierPdf_actionPerformed(ActionEvent e) {
            File source = source(1);
    System.out.println("passé la source");        
            if (source != null) {
                TSourceFichierPdf.setText(source.getAbsolutePath());
                BLancerConversionFichierPdf.setEnabled(true);
            }
        }
    affiche 2x !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public void BSourceDossierPdf_actionPerformed(ActionEvent e) {
            File source = source(2);
    System.out.println("passé la source");        
            if (source != null) {
                TSourceDossierPdf.setText(source.getAbsolutePath());
            }
        }
    affiche 1x !


  6. #6
    Invité de passage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 1
    Par défaut
    Il faudrait peut être que tu rajoutes un break; apres la fin du traitement de ton cas 1; sinon ca execute le case 2 a la suite et ca affiche donc 2 fois ta fenetre !

  7. #7
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Par défaut
    En effet j'ai oublié de mettre les Break;

    mais le problème s'est que JBuilder ne me laisse pas les mettre ? Il me met des erreurs ! Il faut le mettre où le break; ?

    Faut bien le mettre juste avant le "case 2:" ?

    Par contre j'ai essayé de modifier le code en mettant des IF à la place du Switch et ça me fait toujours la même chose !

    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 File source(int index) {
            if (index == 1) {
                JFileChooser chooser = new JFileChooser();
                FileMasque pdf = new FileMasque(new String("pdf"), "Fichiers PDF");
                chooser.addChoosableFileFilter(pdf);
                chooser.setCurrentDirectory(pdfpath);
     
                if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
                    return chooser.getSelectedFile();
                } else {
                    return null;
                }
            } else {
                JFileChooser chooser = new JFileChooser();
                chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                chooser.setCurrentDirectory(pdfpath);
                chooser.setSelectedFile(null);
     
                if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                    return chooser.getSelectedFile();
                } else {
                    return null;
                }
            }
    }

  8. #8
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    @author Jeff Dinkins
    Verifie la licence de ce fichier. Jeff Dinkins est mon manager chez Sun et je trouve ca etrange de voir une version en partie francisee de son code sans licence au dessus

  9. #9
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Par défaut
    Si ça risque de poser un problème je peux chercher où j'avais trouvé ce code et poster le lien ?

  10. #10
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Ca depend de pour qui tu ecris ce code. Je sais qu'on ne te fera pas chier pour ca mais si tu fais ca pour une entreprise, mefie-toi ^^

  11. #11
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Par défaut
    Non alors y'a pas de prob, s'est pour un projet scolaire

    Mais empèche pas que ce truc s'affiche 2x alors que si je veux ouvrir un dossier il s'affiche que 1x

  12. #12
    Membre confirmé
    Avatar de jak0
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    272
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 272
    Par défaut
    Citation Envoyé par Biniou15
    Il faudrait peut être que tu rajoutes un break; apres la fin du traitement de ton cas 1; sinon ca execute le case 2 a la suite et ca affiche donc 2 fois ta fenetre !
    J'avais complétement zappé le break...
    Effectivement si tu ne met pas le break, ca fait les deux cas (dans le premier cas).
    Par si avec les if, ca te le fait deux fois aussi, à part dire, t'es sûr que tu as bien re-compiler après changement, je vois pas trop. dsl...

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/12/2007, 13h31
  2. [JFilechooser] selectionner un répertoire OU un fichier
    Par pierre.zelb dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 05/08/2005, 12h22
  3. Envoyer un fichier pour le faxer...
    Par Sunchaser dans le forum C++Builder
    Réponses: 5
    Dernier message: 24/07/2005, 00h12
  4. [Eclipse 2.1] Encodage des fichiers pour un projet
    Par _-Sky-_ dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/05/2005, 22h26
  5. [débutant] filtrer un fichier pour afficher des infos
    Par Valichou dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 21/04/2004, 11h44

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