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 :

lesaffichages ne se font pas dans le bon ordre


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Points : 43
    Points
    43
    Par défaut lesaffichages ne se font pas dans le bon ordre
    bonjour,
    J'ai un petit probleme dan les interfaces graphiques.
    Voila, en gros, j'affiche une image, je fais un sleep, puis je rafiche une autre image, le probleme c'est que le sleep se fait avant d'affichr la premiere image. quelqu'un sait il comment j peux faire?

    Merci d'avance

    PS: voici un exemple de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    g.drawImage(Perso1, x, y, this);
    Thread.sleep(500);
    g.drawImage(Perso2, x, y, this);

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il ne faut jamais faire de Thread.sleep dans le thread d'affichage (dans lequel tu te trouves quand tu dessines sur ton panel).

    Le moyen de faire ça correctement est d'utiliser un timer Swing qui génère une action toutes les X millisecondes. Cette action aura pour effet de changer l'image et demander le repaint de ton composant.

    Ton composant doit lui se limiter à afficher une image (grosso merdo une simple redéfinition de la méthode paintComponent)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Points : 43
    Points
    43
    Par défaut
    Merci pour ta reponse ultra rapide
    aurais tu un exemple d'utilisation d'un timer swing?
    Encore merci

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Merci de chercher dans la FAQ

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Points : 43
    Points
    43
    Par défaut
    ok merci
    Mais je ne comprends pas le deuxieme argument '"actionListener" l'objet qui ecoute, je vois pas trop.

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bah le timer te génère des évènements, et dans le code de l'actionlistener tu réalises les opérations que tu dois faire (le changement d'image et l'appel à repaint dans ton cas)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Points : 43
    Points
    43
    Par défaut
    a d'accord, j'ai compris le fonctionnement, merci beacoup.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par sinok Voir le message
    grosso merdo
    Je la note

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Points : 43
    Points
    43
    Par défaut
    Toujours le meme probleme mais pas au meme endroit^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if(e.getKeyCode() == 98) {
    			Image Perso2 = pan.actionPerso2(e.getKeyCode());
    			pan.Perso2 = Perso2;
    			pan.test = e.getKeyCode();
    			if(x2 >= x-190) {
    				life = life - 6;
    				pan.life = life;
    			}
    			isEcoute = false;
    			pan.repaint();
    		}
    		if(!isEcoute) 
    			wait(1000);
    Voila donc comment vous vous en doutez surement le wait(); se fait avant le repaint et tout, hors je voudrai qu'il se fasse apres, et je ne vois pas comment je pourrai utiliser de timer swing^^.
    Quelqu'un a t il une idée?

    Merci d'avance

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    quand tu fais un repaint(), java met en pile un message awt demandant le redessinage des composants. ce message sera lu par le thread awt, hors tu fait ton appel à repaint() depuis ton thread awt, que tu met ensuite en pause. Comme déjà mentionné, pas de sleep dans le thread awt! Si t'as des opération longue à faire, tu les fait dans un Thread à part.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Points : 43
    Points
    43
    Par défaut
    N'y a t il pas une autre solution que de faire un nouveau thread?
    Ce que je veux c'est juste desactiver l'ecoute du clavier pendant un certain temps, j'ai essaye removeKeyListener, mais il me mettait un message d'erreur.

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    c'est pas en mettant en pause que tu va désactiver l'écoute du clavier. Les touches du clavier sont automatiquement empillées par l'os dans la queue du GUI, qui elle même est lue entrée par entrée dans le thread AWT. Le mieux est encore de mettre tes composants en disabled si tu veux pas qu'ils fonctionnent pendant un certains temps

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Points : 43
    Points
    43
    Par défaut
    Alors la merci beaucoup, c'est exactement ca que je veux.
    Par contre aurais tu un exemple?

    Encore merci

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    textarea.setEnabled(false);

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    213
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 213
    Points : 43
    Points
    43
    Par défaut
    ok merci beaucoup je vais essayer.

    edit: quand je fais this.setEnable(false);
    et que apres je fais this.setEnable(true);
    Mon programme plante
    Pourquoi?

  16. #16
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    définir "plante"

Discussions similaires

  1. [Débutant] [C#] commandes qui ne se déroule pas dans le bon ordre
    Par Jxxx7 dans le forum ASP.NET
    Réponses: 23
    Dernier message: 23/06/2011, 10h43

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