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

Interfaces Graphiques en Java Discussion :

utilisation de repaint


Sujet :

Interfaces Graphiques en Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut utilisation de repaint
    Salut
    Mon probleme bah c'est repaint justement.J'ai créer une fenetre (avec plein de composant pas utile pour ma quastion).Dans cette fenerte j'ai un panel et dans ce panel j'affiche des images (qui sont choisie en fonction d'un entier dans un tableau 2 dimension (int terrain[][]))Ma question est commence rafraichir mon panel.J'utilise un thread (qui marche) mais c'est pas suffisant.
    Enfin voici ma question: dans un mouseClicked j'aimerais que lorsque je clique sur une case de mon terrain que mon image change juste apres le clique.
    pour etre plus clair voici un peu de code
    2 eme question:J'initialise mon terrain et ensuite je valide et j'aimerais justement que mon terrain s'affiche directement dans mon panel sans que le thread ne soit mis en route.
    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
     
    //la je déclare toute mes variable
    public Fenetre(){
    //...
    fenetreJ=new JFrame();
               fenetreJ.setSize(largeur,hauteur);
               fenetreJ.setLocationRelativeTo(null);
               fenetreP=new JFrame();
               fenetreP.setSize(550,220);
               fenetreP.setLocationRelativeTo(null);
    //...
    P24=new JPanel();//le panel concerné par ma question
    //...
    fenetreJ.add(P24,BorderLayout.CENTER);
    //...
    //tout les écouteurs necéssaires
    }
     
    //...
    //la c'est lorsque je clique sur le bouton valider et qu'il m'initialise mon terrain
    class ValiderListener implements ActionListener{
              public void actionPerformed(ActionEvent e){
     
                 nbIntrus=Integer.parseInt(nbIntrusT.getText());
                 nbArbre=Integer.parseInt(nbArbreT.getText());
                 nbEau=Integer.parseInt(nbEauT.getText());
                 nbMur=Integer.parseInt(nbMurT.getText());
                 //+2 pour que le nombre entré par l'utilisateur soit la taille voulu
                 nbColonnes=Integer.parseInt(nbColonnesT.getText())+2;
                 if((nbArbre>15 && nbIntrus>5 || nbEau>10 && nbIntrus>5 || nbMur>10 && nbIntrus>5) && e.getSource().equals(valide) )
                	 fenetreGPbI.setVisible(true);
                 else
                     {if(nbIntrus>5 && e.getSource().equals(valide))
                    	 fenetrePbI.setVisible(true);
                     else
                         {if(nbArbre>15 || nbEau>10 || nbMur>10 && e.getSource().equals(valide))
                        	 fenetrePb.setVisible(true);
                         else
                            {if(nbColonnes>16)
                            	fenetreTTG.setVisible(true);
                             else
                            	 if(nbColonnes<7)
                            	    fenetreTTP.setVisible(true);
                                 else
                                    {if(e.getSource().equals(valide))
                                       {fenetreP.setVisible(false);
                                        styleA=Env.StandardArbre(ImageArbre);
                                        styleE=Env.StandardEau(ImageEau);
                                        styleM=Env.StandardMur(ImageMur);
                                        styleH=Env.StandardHerbe(ImageHerbe);
                                        styleAg=Env.StandardAgent(ImageAgent);
                                        styleI=Env.StandardIntrus(ImageIntrus);
                                        P27.removeAll();//efface tout les panels de la légende pour réafficher les nouvelles images 
                                        P28.removeAll();
                                        P29.removeAll();
                                        P30.removeAll();
                                        P31.removeAll();
                                       styleAV=Env.StandardArbre(ImageArbre);
                   	      	           styleEV=Env.StandardEau(ImageEau);
                   	      	           styleMV=Env.StandardMur(ImageMur);
                   	      	           styleHV=Env.StandardHerbe(ImageHerbe);
                   	      	           styleAgV=Env.StandardAgent(ImageAgent);
                   	      	           styleIV=Env.StandardIntrus(ImageIntrus);
    }
    //c'est surement par là que je doit rajouter quelque chose
    //...
    public void mouseClicked(MouseEvent e) {
    	    	int y,x=0,xx,yy,j;
    		     if(e.BUTTON1_MASK==KeyEvent.BUTTON1_MASK)
     
    	     x = e.getX();
                 y = e.getY();
                 terrain.terrain[1][1]=1;
                 for(int i=0;i<nbColonnes;i++)
                 {for(j=0;j<nbColonnes;j++)
                 if(terrain.terrain[i][j]==1)
                 {P24.add(new JLabel(styleA));}
                 if(terrain.terrain[i][j]==2)
                 {P24.add(new JLabel(styleE));}
                 if(terrain.terrain[i][j]==3)
                 {P24.add(new JLabel(styleM));}
                 if(terrain.terrain[i][j]==0)
                 {P24.add(new JLabel(styleH));}
                 if(terrain.terrain[i][j]==5)
                 {P24.add(new JLabel(styleAg));}
                 if(terrain.terrain[i][j]==6)
                 {P24.add(new JLabel(styleI));}
                 }
                 P24.repaint();
    }
    //la le repaint bah il me fait rien
    //j'utilise la position de la souris mais comme vous l'aurez rremarqué c'est pas au point mais c'est pas ma priorité
    Bon j'ai cherché un peu sur le net et apparement lorsque je fait repaint d'un panel il semblerait que sa ne rafraichie pas les composant à l'intérieur (et donc sa serais normale qu'il n'y a rien qui se passe).
    Sinon j'aimerais des réponse pas trop difficile à apliqué car je ne suis pas un pro.Merci

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 119
    Points
    119
    Par défaut
    salut ! g pas lu tout ton code parce que je suis pas sur un pc et que je galère un peu... mais t'as essayé updatecomponenttreeUI(composant père) ? ça se trouve dans ui manager si je me souviens bien, et dans tous les cas dans une des classes de javax.swing
    sinon, si tu as directement accès au composant je crois que tu peux utiliser composant.update() qui sera moins lourd car un seul compo à redessiner...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Merci en effet avec composant.updateUI() il me rafraichie bien le panel.
    Encore merci pour cette réponse si rapide et simple.

  4. #4
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Il faudrait pas appeler revalidate() plutôt ? UpdateUI c'est un peu violent étant donné que c'est plutôt lié aux changements de lnf.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Avec revalidate() aussi sa marche.Mais tu sais je ne suis qu'un débutant alors j'ai pris le 1er truc qui marchais.De plus je ne vois pas la différence.Mais je ne comprend pas ton truc de Inf??

  6. #6
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    LnF = Look'n Feel
    C'est le look qui est utilisé pour afficher tes composants swing.

    Le updateUI est censé mettre à jour le composant pour qu'il utilise un autre LnF alors que revalidate() revalide tes composants après modifications.

    Il ne faut pas simplement prendre "une solution qui marche", si la solution n'est pas optimale tu pourrais avoir des problèmes par la suite.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Ok.Merci pour toutes ces informations.

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

Discussions similaires

  1. Clignotement d'un TListView en utilisant Repaint()
    Par FredericB dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/11/2007, 19h34
  2. Fonction JPanel.repaint() utilise 100% du processeur
    Par deadstar62 dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 08/08/2007, 13h23
  3. Quand et dans quels cas utiliser les méthodes repaint() et validate()?
    Par kayzra dans le forum Interfaces Graphiques en Java
    Réponses: 14
    Dernier message: 02/08/2007, 15h46
  4. Utilisation d'un repaint
    Par Marty McFly dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 13/05/2006, 13h08
  5. [Debutant] Utilisation de repaint
    Par Gotterfdom dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/02/2006, 21h43

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