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

SWT/JFace Java Discussion :

[ SWT ] Récupération info d'un Browse


Sujet :

SWT/JFace Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut [ SWT ] Récupération info d'un Browse
    Bonjour, je suis en train de faire une appli avec interface SWT mais j'ai un petit probleme

    J'ai sur mon interface un bouton "Browse" qui doit permettre à l'utilisateur de choisir un fichier à ouvrir dans certaines fonctions de traitement.
    Le nom du fichier se marque bien dans une zone de texte à coté. Le probleme est que en dehors de ce bloc d'action je ne peux pas récupérer le nom de mon fichier, ce qui me permettrait d'appeler des fonctions
    ayant besoin de ce nom de fichier (je veux récupérer nomFichierAOuvrir):
    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
     
    final Button button = new Button(shell, SWT.NONE);
    button.addSelectionListener(new SelectionAdapter() 
    { 
        public void widgetSelected(SelectionEvent e) 
        { 
        } 
    }); 
    button.setBounds(420, 20, 65, 25); 
    button.setText("Browse"); 
     
    Label lblNomFichier = new Label(shell, SWT.NONE); 
    lblNomFichier.setBounds(10, 30, 100, 25); 
    lblNomFichier.setText("Nom du fichier : "); 
    final Text txtNomFichier = new Text(shell, SWT.BORDER); 
    txtNomFichier.setBounds(110, 20, 275, 25); 
    txtNomFichier.setText(""); 
    txtNomFichier.setSize(300, 30); 
     
    button.addListener(SWT.Selection, new Listener() 
    { 
         public void handleEvent(Event e) 
         { 
             String nomFichierAOuvrir; 
             FileDialog dialog = new FileDialog(shell, SWT.OPEN); 
             dialog.setFilterExtensions(new String[] { "*.txt", "*.erc" }); 
             nomFichierAOuvrir = dialog.open(); 
             if ((nomFichierAOuvrir != null) && (nomFichierAOuvrir.length() != 0)) 
            { 
                 txtNomFichier.setText(nomFichierAOuvrir); 
            } 
         } 
    });

  2. #2
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    En dehors de quel bloc d'action :
    Du button.addListener...
    Si tu veux stocker le chemin du fichier selectionné, tu te fais une variable de classe pour stocker le path du fichier, comme ca quand tu choisi ton fichier, tu instancie cette variable.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Oui en dehors de mon bloc addListener je n'arrive pas a recuperer nomFichierAOuvrir.

    Pour etre franc, j'ai pas pigé ta technique...tu pourrais etre un peu explicite svp

  4. #4
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    2 solutions (1) et (2) qui sont en fait les meme

    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
    final Button button = new Button(shell, SWT.NONE); 
    String pathFichierChoisi = "";//(1)
    String nomFichierAOuvrir;//(2)
    button.addSelectionListener(new SelectionAdapter() 
    { 
        public void widgetSelected(SelectionEvent e) 
        { 
        } 
    }); 
    button.setBounds(420, 20, 65, 25); 
    button.setText("Browse"); 
     
    Label lblNomFichier = new Label(shell, SWT.NONE); 
    lblNomFichier.setBounds(10, 30, 100, 25); 
    lblNomFichier.setText("Nom du fichier : "); 
    final Text txtNomFichier = new Text(shell, SWT.BORDER); 
    txtNomFichier.setBounds(110, 20, 275, 25); 
    txtNomFichier.setText(""); 
    txtNomFichier.setSize(300, 30); 
     
    button.addListener(SWT.Selection, new Listener() 
    { 
         public void handleEvent(Event e) 
         { 
             //String nomFichierAOuvrir; (2) tu la sort du bloc
             FileDialog dialog = new FileDialog(shell, SWT.OPEN); 
             dialog.setFilterExtensions(new String[] { "*.txt", "*.erc" }); 
             nomFichierAOuvrir = dialog.open(); 
             if ((nomFichierAOuvrir != null) && (nomFichierAOuvrir.length() != 0)) 
            { 
                pathFichierChoisi = nomFichierAOuvrir; //(1)
                txtNomFichier.setText(nomFichierAOuvrir); 
            } 
         } 
    });
    Sol (1) :
    Quand l'utilisateur a selectionné son fichier, tu affecte le valeur du fichier choisi (le path de ce fichier) a ta variable pathFichierChoisi. Ta variable pathFichierChoisi est un attribut de ta classe, comme ca meme une fois sorti de ton bloc addListener{...} tu a sauvegarder la valeur du path du fichier.

    Sol (2) :
    Ou sinon pour faire plus simple, ta variable NomFichierAOuvrir, au lieu de la declarer dans le handleEvent(), tu la declare dans ta classe. Sinon c'est normal que tu puisse pas la recuperer une fois sorti du bloc, car c'est une variable "local" a ce bloc. Si tuu la declare plus haut, elle "existera" encore une fois sorti de ce bloc.

    Voila, j'espere avoir été plus explicite 8)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Merci, effectivement, tu as été très explicite, j'ai pigé....mais malheureusement ca ne marche pas !!!

    si je déclare les variables en dehors du bloc AddListener, je ne peux pas y acceder dans ce bloc.

    Sinon, j'ai essayé de déclarer la variable comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MaClasse
    {
    	String nomFichierAOuvrir;
    	public static void main(String[] args)
    	{
    		MaClasse window = new MaClasse();
    		window.open();
    	}
     
    	public void open()
                   {
                        .....
                   }
    Je peux y acceder dans mon bloc AddListener mais des que je veux l'afficher en dehors de ce bloc, j'ai rien du tout !! Je pige vraiment pas ce qu'il se passe....

  6. #6
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class MaClasse 
    { 
       String nomFichierAOuvrir; 
       public static void main(String[] args) 
       { 
          MaClasse window = new MaClasse(); 
          window.open(); 
       } 
     
       public void open() 
                   { 
                        ..... 
                   }
    Moi ce que je te disais de faire c'est ca (ci-dessus). De mettre ta variable tout en haut dans ta classe. Comme ca tu peux y acceder partout :
    Dans ton bloc AddListener.
    Dans les autres endroits de ta classe

    Par contre quand tu dis "mais des que je veux l'afficher en dehors de ce bloc, j'ai rien du tout", c'est pas normal, normalement ca marche.
    Fais voir ton code final et la ou tu teste ce qu'il y a dans ta variable, si t'as rien du tout c'est peut etre parce que tu y a rien mis encore

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Voila 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
    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
    public class MaClasse
    {
    	private static final int LARGEUR = 1024;
    	private static final int HAUTEUR = 768;
     
    	String nomFichierAOuvrir;
     
    	public static void main(String[] args)
    	{
    		MaClasse window = new MaClasse();
    		window.open();
    	}
     
    	public void open()
    	{
    		final Display display = new Display();
    		final Shell shell = new Shell();
    		shell.setText("Mon appli");
    		shell.setSize(LARGEUR, HAUTEUR);
    		{
    			final Button button = new Button(shell, SWT.NONE);
    			button.addSelectionListener(new SelectionAdapter()
    			{
    				public void widgetSelected(SelectionEvent e)
    				{
    				}
    			});
    			button.setBounds(420, 20, 65, 25);
    			button.setText("Browse");
     
    			Label lblNomFichier = new Label(shell, SWT.NONE);
    			lblNomFichier.setBounds(10, 30, 100, 25);
    			lblNomFichier.setText("Nom du fichier : ");
    			final Text txtNomFichier = new Text(shell, SWT.BORDER);
    			txtNomFichier.setBounds(110, 20, 275, 25);
    			txtNomFichier.setText("");
    			txtNomFichier.setSize(300, 30);
     
    			button.addListener(SWT.Selection, new Listener()
    			{
    				public void handleEvent(Event e)
    				{
    					//String nomFichierAOuvrir;
    					FileDialog dialog = new FileDialog(shell, SWT.OPEN);
    					dialog.setFilterExtensions(new String[] { "*.txt", "*.erc" });
    					nomFichierAOuvrir = dialog.open();
    					if ((nomFichierAOuvrir != null) && (nomFichierAOuvrir.length() != 0))
    					{
    						txtNomFichier.setText(nomFichierAOuvrir);
    		//Si je mets la ca marche, ca affiche le chemin du fichier choisi
    		//System.out.println(nomFichierAOuvrir);						
                    }
    				}
    			});
     
    			//si je le mets ici, ca n'affiche rien !!!
    			System.out.println(nomFichierAOuvrir);
                        ...............

  8. #8
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Ben ca m'a l'air normal ce que tu dis.
    Tu appelle ta fonction open.
    Il affiche nomFichierAOuvrir qui vaut "" au depart (rajoute le dans ton code String nomFichierAOuvrir = "").
    Tu appui sur le bouton et tu selectionne ton fichier, nomFichierAOuvrir vaut maintenant le fichier choisi.
    Donc tout est normal.

    Ton premier System.out.print (dans le addListener) est appelé chaque fois que l'utilisateur choisi un fichier.
    Le second System.out.print (fin de la fonction open) n'est appelé qu'une seul fois, quant tu appelle cette fonction open, et donc avant que l'utilisateur est choisi un fichier, donc le string ne contient rien.
    Si tu veux voir si ton string a bien changé fais ca :
    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
    public class MaClasse 
    { 
       ... 
     
       String nomFichierAOuvrir = "";//pour eviter les erreurs 
     
       ...
     
        public void open() 
       { 
          ...
             button.addListener(SWT.Selection, new Listener() 
             { 
                public void handleEvent(Event e) 
                { 
                   //String nomFichierAOuvrir;
                   System.out.println("avant ouverture : "+nomFichierAOuvrir);
                   FileDialog dialog = new FileDialog(shell, SWT.OPEN); 
                   dialog.setFilterExtensions(new String[] { "*.txt", "*.erc" }); 
                   nomFichierAOuvrir = dialog.open(); 
                   if ((nomFichierAOuvrir != null) && (nomFichierAOuvrir.length() != 0)) 
                   { 
                      txtNomFichier.setText(nomFichierAOuvrir); 
          //Si je mets la ca marche, ca affiche le chemin du fichier choisi 
          System.out.println("apres ouverture : "+nomFichierAOuvrir);                   
                    } 
                } 
             });
    Tu verra que ton string a bien ete enregistré.

    Voila

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Merci merci merci, ca a l'air de presque marcher !!!

    Sans rire, le seul probleme maintenant c'est que quand je lance mon appli il me fait une erreur FileNotFoundException car il n'attend pas que l'utilisateur est choisi le fichier pour appeler les fonctions.
    Mais bon ca doit pas être super dur à rectifier...enfin j'éspère !!

    En tout cas merci beaucoup !

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    en fait je me suis réjoui trop vite !

    J'ai bien l'impression que ca ne marche toujours pas.

    En effet, pourquoi quand je fais un System.out.println(nomFichier) juste après (mais en dehors) de mon button.addListener{} il me met une ligne blanche ?

  11. #11
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Pour ton probleme de FileNotFound essaye de faire ca :
    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
    public class MaClasse 
    { 
       ... 
     
       String nomFichierAOuvrir = "";//pour eviter les erreurs 
     
       ... 
     
        public void open() 
       { 
          ... 
             button.addListener(SWT.Selection, new Listener() 
             { 
                public void handleEvent(Event e) 
                { 
                   //String nomFichierAOuvrir; 
                   System.out.println("avant ouverture : "+nomFichierAOuvrir); 
                   FileDialog dialog = new FileDialog(shell, SWT.OPEN); 
                   dialog.setFilterExtensions(new String[] { "*.txt", "*.erc" }); 
                   dialog.open();
                   nomFichierAOuvrir = dialog.getFileName();
                   if ((nomFichierAOuvrir != null) && (nomFichierAOuvrir.length() != 0)) 
                   { 
                      txtNomFichier.setText(nomFichierAOuvrir); 
          //Si je mets la ca marche, ca affiche le chemin du fichier choisi 
          System.out.println("apres ouverture : "+nomFichierAOuvrir);                    
                    } 
                } 
             });
    Ensuite en ce qui concerne :
    Citation Envoyé par geegee
    En effet, pourquoi quand je fais un System.out.println(nomFichier) juste après (mais en dehors) de mon button.addListener{} il me met une ligne blanche ?
    Il met une ligne blanche car quand JAVA execute cette ligne de code ton String vaut "".
    Quant JAVA execute la fonction open de ton prog, il fait :
    Construction des labels et de tes buttons...
    Ajout de ton listener sur ton bouton (pour reperer un futur evenement sur celui-ci.
    Affichage du String qui vaut "".
    Ensuite quand l'utilisateur clique sur le bouton, le prog ne rentre que dans le new Listener(){...}, et ne refait pas ce qui y a apres (en particulier ton second System.out.print).
    Le premier System.out.print est executé chaque fois que l'utilisateur clique sur le bouton.
    Le second System.out.print n'est executé que la fois ou le prog passe dans la fonction open.

    Voila, je peux difficilement etre plus clair

  12. #12
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    Mon probleme, pour reagir a ce que tu m'as dit, c'est que quand l'utilisateur choisi le nom du fichier, le fichier ne doit pas être ouvert tout de suite, il est ouvert dans les fonctions de traitement.

    Quand je lance mon prog, il m'affiche tout directement donc il appelle les fonctions qui ont besoin du nom de fichier mais l'utilisateur n'a pas encore choisi ce fichier...

    Je ne sais vraiment plus quoi faire....

Discussions similaires

  1. récupération info user en cours
    Par rems67 dans le forum SharePoint
    Réponses: 6
    Dernier message: 08/11/2007, 15h29
  2. [VBA - O] Récupération infos
    Par helios77 dans le forum VBA Outlook
    Réponses: 2
    Dernier message: 26/05/2007, 23h06
  3. Récupération info WIFI C#
    Par Devil6666 dans le forum C#
    Réponses: 2
    Dernier message: 01/05/2007, 15h01
  4. Réponses: 10
    Dernier message: 24/05/2006, 18h28
  5. [RegEx] Récupération infos flux rss / atom via ereg()
    Par Fab le Fou dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2006, 15h26

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