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 :

Affichage d'un JLabel dans une popup (JFrame)


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut Affichage d'un JLabel dans une popup (JFrame)
    Bonjour,
    Je cherche à faire apparaitre et disparaitre une fenetre popup pendant le déroulement de mon algorithme. J'ai écrit une classe AttenteFrame que voici :

    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
    public class AttenteFrame
    {
    	private static JLabel texte;
    	private static JFrame cadre;
     
    	public AttenteFrame(String string) 
    	{
     
    		cadre = new JFrame("En cours de chargement");
    		JPanel panneau = new JPanel();
    		panneau.setLayout(new BorderLayout());
    		panneau.setSize(250,70);
    		panneau.setBackground(Color.RED);
    		texte = new JLabel(string);
    		texte.setText(string);
    		panneau.add(BorderLayout.CENTER, texte); 
    		cadre.getContentPane().add(BorderLayout.CENTER, panneau);
    		cadre.setSize(275,85);
    		cadre.setResizable(false);
    		java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    		cadre.setLocation(
    				(screenSize.width-cadre.getWidth())/2,
    				(screenSize.height-cadre.getHeight())/2
    		);
    		cadre.setVisible(true);
    	}
     
    	public void setText(String string){
    		texte.setText(string);
    	}
     
    	public void dispose()
    	{
    		cadre.dispose();
    	}
    }
    A n'importe quel moment de mon algo, je veux pouvoir créer, afficher et faire disparaitre une instance d'AttenteFrame.

    Probleme : L'instance se créé bien, mais apparement rien à l'interieur: ni le texte dans mon JLabel, ni la couleur de mon JPanel. La frame semble vide...

    Pourriez vous m'aider ?

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Points : 288
    Points
    288
    Par défaut
    salut
    essaye de changer la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cadre.getContentPane().add(BorderLayout.CENTER, panneau);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cadre.setContentPane(panneau);

  3. #3
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    non .... rien ne change

  4. #4
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Essaie[CODEpanneau.add( texte, BorderLayout.CENTER );
    cadre.getContentPane().add( panneau, BorderLayout.CENTER );[/CODE]plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panneau.add(BorderLayout.CENTER, texte); 
    cadre.getContentPane().add(BorderLayout.CENTER, panneau);
    Pour centrer une fenêtre à l'écran, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cadre.setLocationRelativeTo( null ) ;

  5. #5
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Je te remercie pour tes informations schniouf mais ces modifications ne changent rien, j'ai plutôt l'impression que l'affichage ne se fait pas car la JFrame que je fais apparaître "n'a pas la main" par rapport à ma JFrame générale qui continue à dérouler l'algo. Enfin je sais pas trop ...

    Si vous avez d'autres propositions ...

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Points : 288
    Points
    288
    Par défaut
    ta frame n'a pas la main ?
    je n'ai pas trés bien compris elle s'affiche ? (enfin du moins le cadre ?)
    et ta fenetre principale qui est censé etre derriere continue à s'afficher ?
    ou bien elle devient elle aussi toute grise ?

  7. #7
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Ma fenetre principale s'affiche bien. (enfin j'ai remarqué que si je bouge ma popup par dessus elle n'a pas l'air de se repaint()). M'enfin ca a la limite c'est pas grave car l'algorithme qu'elle est censée faire (affichage d'un graphique) se fait bien au final.
    C'est bien ma popup qui s'affiche mal(le cadre), mais rien dedans ...

    Je sais pas si la popup a la main ou pas, j'ai simplement dit ca car, sans faire exprès j'ai déclenché une ecxeption entre l'affichage de ma popup et sa disparition et une fois que le programme s'est arrété à cause de cette exeption , le JLabel s'est bien affiché sur ma popup...

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Points : 288
    Points
    288
    Par défaut
    ok... donc tu as un probleme de ressource, ton algo prend toutes les ressource et plus rien ne se raffraichit, ni ta frame principale.
    tu dois donc gérer des Thread... je ne sais pas ce qui est le mieux dant ton cas soit mettre l'algo dans un Thread soit gérer l'affichage dans un Thread, l'algo s'est mieux je pense... mais je n'en suis pas sure !

  9. #9
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    D'accord, jvais essayer de voir du coté des Threads, mais je pense que je vais plutôt faire un Thread du coté de ma popup car je pense que ca m'apporterai trop de changement de le faire sur mon algo ... (j'ai plin d'algo différent que je déclenche et j'aimerais que toujours la meme popup s'affiche pour chacun de ces algos

    Merci lilou

  10. #10
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par mattyeux
    D'accord, jvais essayer de voir du coté des Threads, mais je pense que je vais plutôt faire un Thread du coté de ma popup car je pense que ca m'apporterai trop de changement de le faire sur mon algo ... (j'ai plin d'algo différent que je déclenche et j'aimerais que toujours la meme popup s'affiche pour chacun de ces algos

    Merci lilou
    J'aurais préféré un thread par algo ! Cela n'apporte pas beaucoup de modification, si ce n'est d'appeler ta méthode de lancement d'un algo dans la méthode run d'un thread.
    Sinon, il se peut que ton algo s'exécute dans l'EDT, et ton affichage freezera quand même.

  11. #11
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Je ne connais pas très bien les Threads voici ce que j'ai fait:

    Dans mon algorithme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void algorithme() {
        	new Thread(new Runnable() {
    			      public void run() {
    			        AttenteFrame popup=new AttenteFrame("Requete SQL ");
    			        }
    			  }).start();
                //Je fais ma requete
     
        		popup.dispose();
     
        }
    Donc pas d'erreur de compilation, mais toujours pas d'affichage..., de plus si j'essaie de changer le texte de ma popup dans mon algo en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    popup.setText("Traitement de données")
    J'ai une exception qui se lève et le programme s'arrete.

    Est ce bien comme ca qu'on fait des Thread ?

  12. #12
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Comme je l'ai dit plus haut, essaie de mettre plutot tes algorithmes dans les threads.
    Pour plus d'infos sur les thread, tu peux lire Thread et performance avec Swing

  13. #13
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Voila. J'ai fait un petit truc: mon algo fonctionne toujours mais toujours le même problème d'affichage. Voici l'appel de mon algo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    static class AfficheGraphique implements Runnable {
     
            public void run() {
                   //appel de mon algo
                   //construction de mon JPanel dans ma JFrame générale pour affichage du graphique.
        }
     
               }
    ... C'est ca que tu me disais de faire Schniouf ?

  14. #14
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Oui c'est ça.
    Pourrais tu poster le code de l'appel à la construction de AfficheGraphique et le code de l'appel de l'algo ?

  15. #15
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Ok, je le poste mais comme tu vas voir c'est un peu fait a l'arrache donc je vais tenter de bien commenter :

    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
    static class AfficheGraphique implements Runnable {
     
            private GDC_Reporting_Final app;
     
            private GDCDescription GDCDescription;
     
            public DisplayGDC(GDC_Reporting_Final app, GDCDescription d) {
                this.app = app;   
            }
     
            public void run() {
     
    		Class c = Class.forName(this.GDCDescription.getClassName());//recuperation du nom de la classe que je vais utiliser (selon quelque chose qui est selectionné j'ai besoin de telle ou telle classe)
    	                Object chart = c.newInstance();//creation d'une instance de GDCDescription
    	                Class params[] = {String.class, String.class, String.class};
    	      			Object paramsObj[] = {sdeb, sfin, type};
    	                Method m = c.getDeclaredMethod("createGDCPanel", params);//récupération de la méthode où est l'algorithme
    	                JPanel panel = (JPanel) m.invoke(chart, paramsObj);//appel de l'algorithme
     
    	                this.app.chartContainer.removeAll();//j'enleve tout ce qu'il y a dans le Panel ou s'affiche les graphiques
    	                this.app.chartContainer.add(panel);//j'ajoute le Panel de mon nouveau graphique		                
               }

    AfficheGraphique est appellé après un evenement :

    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
    public void valueChanged(TreeSelectionEvent event) {
        	this.chartContainer.removeAll();
            TreePath path = event.getPath();
            Object obj = path.getLastPathComponent();//récupération de la selection sur mon JTree
            //Son traitement
            if (obj != null) {
                DefaultMutableTreeNode n = (DefaultMutableTreeNode) obj;
                Object userObj = n.getUserObject();
                if (userObj instanceof GDCDescription) {
                    GDCDescription dd = (GDCDescription) userObj;
                    SwingUtilities.invokeLater(new AfficheGraphique(this, dd)); //ICI J'APPELLE AFFICHEGRAPHIQUE
                }
                else {
                    this.chartContainer.removeAll();
                    this.chartContainer.add(createNoGDCSelectedPanel());
                    this.splitter.validate();
                    displayDescription("html/select.html");
                }
            }
            System.out.println(obj);
        }
    Je sais que ce code parait brutal et peu ordonné . Mais quand j'ai commencé ce projet j'étais pas a l'aise vec le java. Et vu que ca marche, j'ai un peu la flemme de tout rechanger .

    Merci, si il y a un truc que tu piges pas, demande moi

  16. #16
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Voilà l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SwingUtilities.invokeLater(new AfficheGraphique(this, dd));
    Tu exécutes ce bout de code dans l'Event Dispatching Thread, le thread de mise à jour de l'interface graphique : pendant que tu appelles la méthode createGDCPanel, plus rien n'est mis à jour ! Tu devrais plutot l'appeler comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Thread( new AfficheGraphique(this, dd) ).start() ;

  17. #17
    Membre régulier Avatar de mattyeux
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 169
    Points : 101
    Points
    101
    Par défaut
    Tu es tout simplement génial !

    Merci

  18. #18
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par mattyeux
    Tu es tout simplement génial !
    Oh non, j'en suis loin !!!
    Citation Envoyé par mattyeux
    Merci
    De rien

    N'oublie pas de cliquer sur , merci

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

Discussions similaires

  1. Affichage d'un JLabel dans une JFrame
    Par Christophe39 dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 17/02/2014, 13h41
  2. affichage dans une popup
    Par aigle dans le forum ASP.NET
    Réponses: 3
    Dernier message: 16/02/2009, 11h06
  3. Pb d'affichage de bouton dans une fenetre (JFrame)
    Par doul21 dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 07/04/2008, 09h25
  4. [HTML:ERROR] affichage dans une popup dédiée
    Par jdvacheron dans le forum Struts 1
    Réponses: 4
    Dernier message: 12/02/2008, 12h17
  5. [PHP-JS] Affichage d'une image dans une popup à la taille
    Par urbanspike dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2005, 20h53

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