Pause entre deux affichages de JLabel
Buche
-
carottebleue -
carottebleue -
Bonjour a tous,
Je viens vers vous pour un petit problème de Java dans lequel je débute.
Je souhaite que mon programme affiche des cartes a jouer (chacune étant sous forme de JLabel en l'occurence) en marquant une pause entre chaque affichage sur mon JPanel.
L'affichage sans temps d'attente entre les cartes fonctionne bien, mais des que j'introduis une pause .... ca ne marche que sur la console...
En effet, après mes recherches sur le net, j'ai essayé un thread.sleep(), et meme des fonctions systèmes:
Cela fonctionne sur la console(on voit bien la pause entre les différentes cartes) cependant les cartes ne s'affichent pas une a une a l'écran, mais toutes groupées a la fin.
Voila, si vous avez déja rencontré ce genre de probleme ca m'interesse bcp :)
Merci a tous,
Buche
Je viens vers vous pour un petit problème de Java dans lequel je débute.
Je souhaite que mon programme affiche des cartes a jouer (chacune étant sous forme de JLabel en l'occurence) en marquant une pause entre chaque affichage sur mon JPanel.
L'affichage sans temps d'attente entre les cartes fonctionne bien, mais des que j'introduis une pause .... ca ne marche que sur la console...
En effet, après mes recherches sur le net, j'ai essayé un thread.sleep(), et meme des fonctions systèmes:
Cela fonctionne sur la console(on voit bien la pause entre les différentes cartes) cependant les cartes ne s'affichent pas une a une a l'écran, mais toutes groupées a la fin.
Voila, si vous avez déja rencontré ce genre de probleme ca m'interesse bcp :)
Merci a tous,
Buche
A voir également:
- Pause entre deux affichages de JLabel
- Nombre de jours entre deux dates excel - Guide
- Deux ecran pc - Guide
- Comment faire deux colonnes sur word - Guide
- Itinéraire google map entre deux adresses - Guide
- Supprimer une conversation messenger pour les deux personnes ✓ - 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 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);
}
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(); } }