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

AWT/Swing Java Discussion :

Utilisation de SwingUtities.innvokeLater


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 114
    Points : 72
    Points
    72
    Par défaut Utilisation de SwingUtities.innvokeLater
    Bonjour

    J'essais de mettre sur pied une appli toute bete d'Agenda pour débuter avec SWING.

    J'ai lu dans un tuto que l'on appelé le constructeur de la fenetre dans un bloc d'instruction qui est a mes yeux un peu obscur. L'histoire de thread et d'EDT est flou pour moi.

    J'ai donc codé un truc dans ce gene :
    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 gestionnaire(){
     
    		utilisateur = null;
    		this.fenetreLogin = null;
    		SwingUtilities.invokeLater(new Runnable(){
    			public void run(){
    				//On crée une nouvelle instance de notre JDialog
    				fenetreLogin = new fenetreLogin(utilisateur);
    				fenetreLogin.setVisible(true);
    			}
     
    		});
     
     
    		while (! this.fenetreLogin.isLogged()){
     
    		}
    		SwingUtilities.invokeLater(new Runnable(){
    			public void run(){
    				//On crée une nouvelle instance de notre JDialog
    				fenetrePrincipale = new fenetrePrincipale(utilisateur);
    				fenetrePrincipale.setVisible(true);//On la rend visible
     
    			}
     
    		});
     
    	}
    Bien sur cela ne marche pas.

    Le résultat que je soouhaite c'est :
    - Avoir une fenetre ou l'utilisateur saisie son user + pass
    - Lors de l'appuie sur valide des control sont effectué (recherehce dans un fichier si le User est ok)
    - Si user KO alors on met un message et on reste sur la fenetre de login
    Si user OK ouverture d'une nouvelle fenetre avec mon appli principale.

    Je m'y prend certainement très mal donc j'espere que vous saurez m'aiguiller dans le droit chemin.

  2. #2
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Bonsoir,
    Je ne comprends pas bien l'utilisation du SwingUtilities.invokeLater.
    Je ne pense pas que tu en aies réeelement besoin.

    Pour faire ce que tu demandes (si je ne me trompe pas) il faut :
    - créer un fenetre avec les composants qui t'intéressent (bouton valider, JTextField pour le nom et pass, etc...)
    - créer une action qui aura la lourde charge de vérifier si le compte est valide (ton action prendra les JTextField en parametre pour pouvoir les interroger, et éventuellement ta fenetre pour pouvoir y afficher un message d'erreur)
    - tu ajoutes l'action au bouton avec bouton.addActionListener() il me semble
    et hop ca roule. Tu ne devrais pas avoir besoin de gérer des Thread ou autre choses compliquées, ça se fait tout seul.

    Je n'ai malheureusement pas d'environnement donc je ne peux pas tester la solution que je viens de te donner, mais dans les grandes lignes c'est ce qu'il faut faire.
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 114
    Points : 72
    Points
    72
    Par défaut
    Pour ce cas particulier ok je n'ai pas besoin de thread mais après je pense faire une appli plus lourde.

    Donc je pensais déja mettre en place le system pour decouvrir

  4. #4
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Le résultat que je souhaite c'est :
    - Avoir une fenetre ou l'utilisateur saisie son user + pass
    - Lors de l'appuie sur valide des control sont effectué (recherehce dans un fichier si le User est ok)
    - Si user KO alors on met un message et on reste sur la fenetre de login
    Si user OK ouverture d'une nouvelle fenetre avec mon appli principale.
    Sur l'exemple que tu donnes, toutes les tâches peuvent s'effectuer sans parallélisation.
    La gestion des thread est régulièrement à l'origine de bugg parfois difficiles à corriger.
    Si je peux te donner un conseil, c'est de ne mettre des Thread que si tu en as réellement besoin, là ça risque plus de compliquer le code, et je ne pense pas qu'il y ait une quelconque valeur ajoutée.

    Pour débuter avec Swing et la création de fenêtres, il y a des exemples relativement simples qui permettent de faire beaucoup de choses sans avoir à déclarer des Thread.

    Voilà un tuto pris au hasard sur google, il m'a l'air assez clair et il devrait te permettre de découvrir Swing avec des exemples simples et t'aider à faire ta fenêtre .

    http://prevert.upmf-grenoble.fr/Prog...sMatieres.html

    Bon courage.
    "Ils ne savaient pas que c'était impossible... alors ils l'ont fait." Mark Twain

  5. #5
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    Citation Envoyé par Arnich
    Le résultat que je soouhaite c'est :
    - Avoir une fenetre ou l'utilisateur saisie son user + pass
    - Lors de l'appuie sur valide des control sont effectué (recherehce dans un fichier si le User est ok)
    - Si user KO alors on met un message et on reste sur la fenetre de login
    Si user OK ouverture d'une nouvelle fenetre avec mon appli principale.
    Excuses-moi mais je ne comprend pas pourquoi t'arrives pas a faire ce que veux ,l'algo est bien defini et vincent63 t'a bien donné l'idéé.
    Tu as le choix tu peux faire une petite classe qui te permet de creer ta fenetre de login avec comme composant:
    JTextField 1----> Login
    JTextField 2---->Mot de Passe
    JButton 1 ---->Valider
    JButton 2 ---->Annuler
    l'ActionListener associer au bouton 'Valider' comme vincent63 va se charger de verifier si l'identification s'est bien passé en allant verifier dans le fichier
    *Fonction pour verifier si Identification reussie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       Si (Identification(User,password) Vrai)
           Fermer la fenetreLogin()
           Lancer la fenetrePrincipale( )
      FinSi
      Sinon
           Ne Rien faire ou Envoyer un message d''Erreur Identification
      FinSinon
    Lancer la fenetre principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
           FenetrePrincipale frame=new FenetrePrincipale();
           frame.setVisible(true);
           frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    Voila mon idéé
    @+
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Avant d'aller plus loin, ma question est : dans quelle Thread ce code serait-il execute ? Ceci est-il directement lance a partir du main() ou serait-il execute a partir d'une interface graphique ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 114
    Points : 72
    Points
    72
    Par défaut
    Ma fenetre de login et lancé a la construction de ma classe gestionnaire (dans le Main)

    En fait mon problème c'est pouvoir accéder a ma fenetre login depuis le gestionnaire

    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 gestionnaire(){
     
    		utilisateur = null;
    		this.fenetreLogin = null;
    		SwingUtilities.invokeLater(new Runnable(){
    			public void run(){
    				//On crée une nouvelle instance de notre JDialog
    				fenetreLogin = new fenetreLogin(utilisateur);
    				fenetreLogin.setVisible(true);
    			}
     
    		});
     
    		// this.fenetreLogin est null
    		while (! this.fenetreLogin.isLogged()){
     
    		}
    		SwingUtilities.invokeLater(new Runnable(){
    			public void run(){
    				//On crée une nouvelle instance de notre JDialog
    				fenetrePrincipale = new fenetrePrincipale(utilisateur);
    				fenetrePrincipale.setVisible(true);//On la rend visible
     
    			}
     
    		});
     
    	}

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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