A voir également:
- Pause entre deux affichages de JLabel
- Itinéraire google map entre deux adresses - Guide
- Deux ecran pc - Guide
- Annonce en pause leboncoin - Forum Vos droits sur internet
- Arnaque paiement sécurisé Leboncoin et piratage de compte ✓ - Forum Consommation & Internet
- Adèle consulte son compte sur le site de sa banque et obtient l'affichage ci-dessous. complétez le texte. - Forum Facebook
3 réponses
Re tout le monde!
Meme pas une petite idée? un petit conseil siouplé ? :)
Je suis complètement bloqué perso.
Merci de votre aide!
Meme pas une petite idée? un petit conseil siouplé ? :)
Je suis complètement bloqué perso.
Merci de votre aide!
J'ai le même problème, si quelqu'un trouve la solution, merci d'avance.
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
19 avril 2013 à 19:00
19 avril 2013 à 19:00
C'est parce qu'il ne faut pas faire la pause à l'intérieur du paint (ou repaint), mais dans une méthode extérieure qui fera plusieurs appels (aussi rapides que possible) à paint avec des pauses entre deux affichages.
Mais ce serait plus simple d'avoir ton code pour te montrer la différence.
Mais ce serait plus simple d'avoir ton code pour te montrer la différence.
J'ai pas tout compris mais voilà mon code :
testLocation(p, ZONE_IMAGE_10, "mouseClicked - data 10");//case 1
if (testLocation( p, ZONE_IMAGE_10, "mouseClicked - data 10")){
int x =10;
int y =10;
while (true){
ImageIcon ii = new ImageIcon(this.getClass().getResource("Essaye-lapin2.gif"));
imageLabel.setIcon(ii);
imageLabel.setBounds(x,y,ii.getIconWidth(),ii.getIconHeight());
imageLabel.setVisible(true);
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
/// le but c'est de mettre une pause ici
x=x+100;
y=y+1;
imageLabel.setIcon(ii);
imageLabel.setBounds(x,y,ii.getIconWidth(),ii.getIconHeight());
imageLabel.setVisible(true);
//ImageIcon ii1 = new ImageIcon(this.getClass().getResource("Essaye-lapin2.gif"));
}
//imageLabel1.setIcon(ii1);
// imageLabel1.setBounds(x,y,ii.getIconWidth(),ii.getIconHeight());
//imageLabel1.setVisible(true);
}
testLocation(p, ZONE_IMAGE_10, "mouseClicked - data 10");//case 1
if (testLocation( p, ZONE_IMAGE_10, "mouseClicked - data 10")){
int x =10;
int y =10;
while (true){
ImageIcon ii = new ImageIcon(this.getClass().getResource("Essaye-lapin2.gif"));
imageLabel.setIcon(ii);
imageLabel.setBounds(x,y,ii.getIconWidth(),ii.getIconHeight());
imageLabel.setVisible(true);
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
/// le but c'est de mettre une pause ici
x=x+100;
y=y+1;
imageLabel.setIcon(ii);
imageLabel.setBounds(x,y,ii.getIconWidth(),ii.getIconHeight());
imageLabel.setVisible(true);
//ImageIcon ii1 = new ImageIcon(this.getClass().getResource("Essaye-lapin2.gif"));
}
//imageLabel1.setIcon(ii1);
// imageLabel1.setBounds(x,y,ii.getIconWidth(),ii.getIconHeight());
//imageLabel1.setVisible(true);
}
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
20 avril 2013 à 15:14
20 avril 2013 à 15:14
Vu que je n'ai pas ton code complet je n'ai pas trouvé l'erreur, mais en gros ta méthode est bonne. Tu as en particulier utilisé une méthode extérieure pour faire appel à repaint (ce que n'avait pas du faire Buche vu la description de son problème)
Attention, si tu fais new ImageIcon à chaque tour de boucle, tu vas lire et relire plusieurs fois la même image ce qui va perdre du temps et consommer inutilement de la mémoire. Il vaut mieux charger l'image une fois au départ puis la réutiliser.
J'ai repris l'idée de ton code pour te montrer un exemple complet :
Attention, si tu fais new ImageIcon à chaque tour de boucle, tu vas lire et relire plusieurs fois la même image ce qui va perdre du temps et consommer inutilement de la mémoire. Il vaut mieux charger l'image une fois au départ puis la réutiliser.
J'ai repris l'idée de ton code pour te montrer un exemple complet :
import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; public class Fenetre extends JFrame { private static final long serialVersionUID = 1; protected final JLabel label; protected int x=0, y=0; public Fenetre() { ImageIcon img = new ImageIcon(Fenetre.class.getResource("Essaye-lapin2.gif")); label = new JLabel(img); label.setSize(img.getIconWidth(),img.getIconHeight()); label.setLocation(x,y); setLayout(null); add(label); setSize(500,500); setExtendedState(MAXIMIZED_BOTH); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } /* @Override public void paint(java.awt.Graphics g) { super.paint(g); System.out.printf("paint x=%d,y=%d\n",x,y); } */ public void deplacerImage() { while (true) { x += 10; y += 10; label.setLocation(x,y); repaint(); try { Thread.sleep(1000); } catch (InterruptedException e) { break; } } } public static void main(String[] args) { final Fenetre f = new Fenetre(); f.deplacerImage(); } }