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 :

Probleme avec JFileChooser en JAVA


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Etudiant Ingenieur
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingenieur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Probleme avec JFileChooser en JAVA
    Bonjour,
    Je suis en train de développer un logiciel en JAVA.
    A un moment, je dois sélectionner un dossier. J'ai donc utilisé JFileChooser avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    .
    Niveau fonctionnement ca marche plutot bien cependant il y a un bug, lorsque je clique sur 'Ouvrir' après avoir sélectionné le dossier voulu, la page se ferme (normal jusqu'a maintenant) et se ré ouvre, si je la ferme, le fichier choisi précédemment n'est pas sélectionné et affiche "erreur" (on tombe donc sur une exception ?), mais si je le sélectionne a nouveau et que je clique sur 'Ouvrir' ça marchera.
    Donc je vois pas trop comment régler ça
    Voici mon code:

    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 String configurer2(){
     
    	JFileChooser choser;
    	choser=new JFileChooser();
    	choser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); // Dossier seulement
    	choser.setCurrentDirectory(new File("C:/Documents and Settings/Dossantp/Bureau/"));
    	int state = choser.showOpenDialog(this);
    	if(state == JFileChooser.APPROVE_OPTION){
    		File f =choser.getSelectedFile();
    		String adr;
    		adr = f.getAbsolutePath();
    		return adr;
    	}
    	else
    		return "erreur";
    }
    Si vous avez des solutions ou conseils, je suis preneur !

    Merci

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Ton code semble être correcte, peux tu posté l'exception ??

  3. #3
    Candidat au Club
    Homme Profil pro
    Etudiant Ingenieur
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingenieur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut,

    Justement je crois pas qu'il y en ait, c'est juste que je dois choisir le dossier deux fois a chaque fois et je ne trouve pas le problème. De plus j'ai une autre méthode pour la sélection d'un fichier et non dossier ( FILEs_ONLY ) qui marche très bien. Et au niveau de l'appel de chacune j'ai écrit le même code pour 2 boutons différant.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le comportement que tu constates est "normal" : parce que même si le JFileChooser est paramétré en DIRECTORIES_ONLY, le filtre est configuré pour fonctionner en sélection de fichier. En fait, pour moi, un JFileChooser, n'est pas tout à fait adapté à la sélection de dossier, parce que, pour ce cas, le bouton "ouvrir" devrait être dédoublé (un pour ouvrir = naviguer dans l'arborescence et un pour valider la sélection) (En SWT, le DirectoryChooser présente un arbre, avec des boutons de expand/collapse, pour ouvrir ou fermer, et, est donc plus adapté, car le bouton OK ne sert qu'à valider/fermer le dialogue) . Avec un seul bouton, on a ce comportement étrange (ouvrir un dossier qui n'a pas de sous dossier sélectionne le dossier (et ferme le dialogue), alors que ouvrir un dossier qui a des sous-dossiers l'ouvre, pour descendre à l'intérieur...

    Pour forcer la validation d'un dossier avec des fils, ajoutes chooser.setAcceptAllFileFilterUsed(false);. Il faudrait aussi changer le nom du bouton "Ouvrir", pour être cohérent (car ouvrir n'ouvrira plus), par exemple en faisant chooser.setApproveButtonText("OK");. Malheureusement, le filtre reste visible et ce n'est pas très clean, je trouve.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    Ton code fonctionne bien je viens de le tester avec mon propre environnement :
    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
     
    package test;
    import java.io.File;
    import javax.swing.JFileChooser;
    public class TestFileChooser extends javax.swing.JFrame {
    	public TestFileChooser() {
    		initComponents();
    	}
    	@SuppressWarnings("unchecked")
    	private void initComponents() {
    		jButton1 = new javax.swing.JButton();
    		jTextField1 = new javax.swing.JTextField();
    		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    		jButton1.setText("jButton1");
    		jButton1.addActionListener(new java.awt.event.ActionListener() {
    			public void actionPerformed(java.awt.event.ActionEvent evt) {
    				jButton1ActionPerformed(evt);
    			}
    		});
    		javax.swing.GroupLayout layout = new javax.swing.GroupLayout(
    				getContentPane());
    		getContentPane().setLayout(layout);
    		layout.setHorizontalGroup(layout
    				.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    				.addGroup(
    						javax.swing.GroupLayout.Alignment.TRAILING,
    						layout.createSequentialGroup()
    								.addGap(37, 37, 37)
    								.addComponent(jTextField1,
    										javax.swing.GroupLayout.PREFERRED_SIZE,
    										292,
    										javax.swing.GroupLayout.PREFERRED_SIZE)
    								.addPreferredGap(
    										javax.swing.LayoutStyle.ComponentPlacement.RELATED,
    										121, Short.MAX_VALUE)
    								.addComponent(jButton1).addGap(125, 125, 125)));
    		layout.setVerticalGroup(layout
    				.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    				.addGroup(
    						layout.createSequentialGroup()
    								.addGap(49, 49, 49)
    								.addGroup(
    										layout.createParallelGroup(
    												javax.swing.GroupLayout.Alignment.BASELINE)
    												.addComponent(jButton1)
    												.addComponent(
    														jTextField1,
    														javax.swing.GroupLayout.PREFERRED_SIZE,
    														javax.swing.GroupLayout.DEFAULT_SIZE,
    														javax.swing.GroupLayout.PREFERRED_SIZE))
    								.addContainerGap(322, Short.MAX_VALUE)));
     
    		pack();
    	}// </editor-fold>
     
    	private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    		jTextField1.setText(getPath());
    	}
     
    	public String getPath() {
    		JFileChooser chooserPathFileIfNotDelete = new JFileChooser();
    		chooserPathFileIfNotDelete
    				.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    		chooserPathFileIfNotDelete.setCurrentDirectory(new File("c:/"));
    		int result = chooserPathFileIfNotDelete.showSaveDialog(this);
    		if (result == chooserPathFileIfNotDelete.APPROVE_OPTION) {
    			File f = chooserPathFileIfNotDelete.getSelectedFile();
    			System.out.println(f.getAbsolutePath());
    			return f.getAbsolutePath();
    		}
    		System.out.println("erreur");
    		return "error";
    	}
    	public static void main(String args[]) {
    		try {
    			for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager
    					.getInstalledLookAndFeels()) {
    				if ("Nimbus".equals(info.getName())) {
    					javax.swing.UIManager.setLookAndFeel(info.getClassName());
    					break;
    				}
    			}
    		} catch (ClassNotFoundException ex) {
    			java.util.logging.Logger.getLogger(TestFileChooser.class.getName())
    					.log(java.util.logging.Level.SEVERE, null, ex);
    		} catch (InstantiationException ex) {
    			java.util.logging.Logger.getLogger(TestFileChooser.class.getName())
    					.log(java.util.logging.Level.SEVERE, null, ex);
    		} catch (IllegalAccessException ex) {
    			java.util.logging.Logger.getLogger(TestFileChooser.class.getName())
    					.log(java.util.logging.Level.SEVERE, null, ex);
    		} catch (javax.swing.UnsupportedLookAndFeelException ex) {
    			java.util.logging.Logger.getLogger(TestFileChooser.class.getName())
    					.log(java.util.logging.Level.SEVERE, null, ex);
    		}
    		java.awt.EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				new TestFileChooser().setVisible(true);
    			}
    		});
    	}
    	private javax.swing.JButton jButton1;
    	private javax.swing.JTextField jTextField1;
    }
    Ton problème viens certainement d'une mauvaise structuration et d'appel au niveau de ton code.

  6. #6
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2014
    Messages : 262
    Points : 634
    Points
    634
    Par défaut
    @arhec : ça te dirait de poster l'exception s'il te plaît?

  7. #7
    Candidat au Club
    Homme Profil pro
    Etudiant Ingenieur
    Inscrit en
    Septembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant Ingenieur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour vos aides!

    @joel.drigo: Merci pour tes conseils, c'est vrai que c'est mieux avec ces deux lignes de codes.

    @Maine13 : Tu as raison, j'ai bien vérifié les appels de la fonction après ta réponse, et tu as vu juste, j'appelais 2 fois de suite la fonction, la première fois pour le choix du fichier, mais la seconde fois, pour pour mettre l'adresse sélectionné dans la JTextField correspondante, comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(e.getSource()==changerPa2){
    	String adr=configurer2();
    	if(!adr.equals("erreur")){
             	TadrPa2.setText(configurer2());         
    	}
    }
    J'ai rectifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(e.getSource()==changerPa2){
    		String adr=configurer2();
    		if(!adr.equals("erreur")){
    			TadrPa2.setText(adr);         
    		}
    	}
    Et ca m'a l'air de bien fonctionner

    Merci encore.

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

Discussions similaires

  1. Probleme avec JFileChooser
    Par L4BiN dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 04/07/2007, 17h03
  2. probleme avec thread en java
    Par manelinfo dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 20/05/2007, 18h27
  3. probleme avec la commande java
    Par blaise_laporte dans le forum EDI et Outils pour Java
    Réponses: 3
    Dernier message: 14/03/2007, 17h33
  4. Probleme avec un projet Java
    Par BenzDev dans le forum Websphere
    Réponses: 2
    Dernier message: 14/02/2007, 12h26
  5. Problème avec l'interface java.io.serializable.
    Par mitje dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 26/01/2006, 04h19

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