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 :

Scintillement d'une image lors de son déplacement


Sujet :

Interfaces Graphiques en Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Scintillement d'une image lors de son déplacement
    Bonjour,

    j'essaie de faire descendre une image dans le contentPane d'une JFrame. L'image descend mais scintille, problème que je n'arrive pas à régler.
    Pour cela j'ai d'abord créé la classe MonImage:

    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 class MonImage extends JComponent
    {
        private Image img;
        private int x, y;
        public MonImage(String s)
        {
        	img = getToolkit().getImage (s);
            x = 0;
            y = 0;
        }
        public void paintComponent(Graphics g)
        {
        	g.drawImage (img, x, y, this);
        }
        public void setPos (int _x, int _y)
        {
        	x = _x;
        	y = _y;
        }
    }
    Ensuite dans la JFrame, j'ajoute une image au contentPane:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    image2=new MonImage("image.png");
     
    JPanel contentPane = (JPanel)this.getContentPane();
    contentPane.setBackground(Color.white);
    contentPane.add(image2);
    Enfin, je lance le thread définit par la classe 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    class PrimeThread extends Thread {
     
    PrimeThread() {}
     
    public void run() {
    try
    {
    int x=0,y=5;
    while(true)
    {
    	Thread.sleep(35);		
    	image2.setVisible(false);
    	image2.setPos(x,y);
    	image2.setVisible(true);
    	y+=4;
    }
            }
            catch(Exception e)
            {
            	System.out.println("Exception: " + e);
            }
             }
         }
    Ce que j'essaie de trouver c'est: comment faire en sorte que l'image ne scintille pas lors de sa descente ?


    Merci.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par johnbob789
    Enfin, je lance le thread définit par la classe ci-dessous:
    Toutes les modifications sur les composants de l'interface graphique doivent être effectué via le thread de l'EDT, et non pas dans un thread quelconque. Pour plus de détail : Threads et performance avec Swing par Gfx

    Dans ton cas le plus simple serait d'utiliser un javax.swing.Timer...De plus, plutôt que d'effacer/réafficher le composant, il serait préférable d'utiliser repaint()...


    Exemple :


    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
     
            final MonImage image2 = new MonImage("duke.gif");
     
            // ...
     
            // Execute l'ActionListener toutes les 35ms dans l'EDT :
            Timer timer = new Timer(35, new ActionListener() {
                int x = 0, y = 5;
                public void actionPerformed(ActionEvent e) {
                    image2.setPos(x, y);
                    image2.repaint();
                    y += 4;
                }
            });
            timer.start();

    a++

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse. Je reposterais un message dès que j'aurais eu le temps d'essayer.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Ca marche parfaitement! Merci pour le lien et le bout de code.

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

Discussions similaires

  1. Une bordure d'image lors de son survol
    Par dhillig dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 12/11/2014, 23h00
  2. Réponses: 2
    Dernier message: 14/11/2013, 09h13
  3. Peut-on limiter les dimensions d'une image lors de son affichage ?
    Par lolymeupy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 08/06/2008, 18h21
  4. Scintillement de l'image lors de son déplacement
    Par micatt dans le forum Delphi
    Réponses: 3
    Dernier message: 04/03/2007, 12h22
  5. Reduire la taille d'une image lors de son upload
    Par mael94420 dans le forum ASP
    Réponses: 1
    Dernier message: 19/06/2006, 20h27

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