Boucle while et affichage des images
Résolu/Fermé
toto5812
Messages postés
57
Date d'inscription
mercredi 5 août 2009
Statut
Membre
Dernière intervention
21 janvier 2015
-
24 mai 2013 à 22:07
toto5812 Messages postés 57 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 21 janvier 2015 - 25 mai 2013 à 19:02
toto5812 Messages postés 57 Date d'inscription mercredi 5 août 2009 Statut Membre Dernière intervention 21 janvier 2015 - 25 mai 2013 à 19:02
A voir également:
- Boucle while et affichage des images
- Des images - Guide
- Affichage double ecran - Guide
- Redmi note 10 redemarre en boucle - Forum Xiaomi
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Problème affichage le bon coin ✓ - Forum Virus
2 réponses
toto5812
Messages postés
57
Date d'inscription
mercredi 5 août 2009
Statut
Membre
Dernière intervention
21 janvier 2015
25 mai 2013 à 15:07
25 mai 2013 à 15:07
Merci KX,
en effet, je débute et avance en tatonnant dans la programmation graphique..
Merci pour ton exemple, je crois comprendre ce que tu veux dire!
Ce que je n'arrive pas en partant de cet exemple c'est rajouter une image de fond...
quelle méthode employer et où faut-il la placer??
Merci
en effet, je débute et avance en tatonnant dans la programmation graphique..
Merci pour ton exemple, je crois comprendre ce que tu veux dire!
Ce que je n'arrive pas en partant de cet exemple c'est rajouter une image de fond...
quelle méthode employer et où faut-il la placer??
Merci
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 015
25 mai 2013 à 11:10
25 mai 2013 à 11:10
Le problème le plus évident c'est que tu as mis tout ton code à l'intérieur de paintComponent ce qui est extrêmement faux !
La méthode paintComponent (de même que paint en awt) est faite uniquement pour dire ce qui doit être affiché au moment où on lui demande. Cela signifie :
1) rien ne sera affiché avant que la méthode paintComponent ne soit terminé
2) la méthode paintComponent sera appelé à chaque fois qu'il faut réafficher la fenêtre, par exemple, à chaque fois que tu redimensionnes ta fenêtre.
Il faut donc que la méthode soit la plus rapide à exécuter possible (pour que l'affichage soit fluide), en particulier il ne faut pas que tu fasses de ImageIO.read dans cette méthode, car cela signifie que tu vas relire tout tes fichiers à chaque fois que la fenêtre se rafraîchit ce qui prend beaucoup de temps.
De plus, il ne faut pas faire non plus ton Collections.shuffle à ce niveau là, car sinon, à chaque nouvel affichage, toutes tes photos apparaîtront dans un nouvel ordre, ce qui va être très moche !
Enfin, n'oublie pas d'appeler la méthode super.paintComponent(g); au tout début de ta méthode, il faut le faire à chaque fois que tu redéfinis une méthode de ton composant (ton JPanel ici)
Voici un exemple simple pour voir ces deux problèmes.
À tester : change la taille de la fenêtre. Tu verras s'afficher le message "paint" à chaque fois que la méthode a été appelé, et que les chiffres sont sans arrêt modifié puisque le shuffle agit à chaque fois.
La méthode paintComponent (de même que paint en awt) est faite uniquement pour dire ce qui doit être affiché au moment où on lui demande. Cela signifie :
1) rien ne sera affiché avant que la méthode paintComponent ne soit terminé
2) la méthode paintComponent sera appelé à chaque fois qu'il faut réafficher la fenêtre, par exemple, à chaque fois que tu redimensionnes ta fenêtre.
Il faut donc que la méthode soit la plus rapide à exécuter possible (pour que l'affichage soit fluide), en particulier il ne faut pas que tu fasses de ImageIO.read dans cette méthode, car cela signifie que tu vas relire tout tes fichiers à chaque fois que la fenêtre se rafraîchit ce qui prend beaucoup de temps.
De plus, il ne faut pas faire non plus ton Collections.shuffle à ce niveau là, car sinon, à chaque nouvel affichage, toutes tes photos apparaîtront dans un nouvel ordre, ce qui va être très moche !
Enfin, n'oublie pas d'appeler la méthode super.paintComponent(g); au tout début de ta méthode, il faut le faire à chaque fois que tu redéfinis une méthode de ton composant (ton JPanel ici)
Voici un exemple simple pour voir ces deux problèmes.
À tester : change la taille de la fenêtre. Tu verras s'afficher le message "paint" à chaque fois que la méthode a été appelé, et que les chiffres sont sans arrêt modifié puisque le shuffle agit à chaque fois.
import java.awt.Color; import java.awt.Graphics; import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.swing.JFrame; public class Panel { public static void main(String[] args) { JFrame frame = new JFrame() { private static final long serialVersionUID = 1; int n=0; @Override public void paint(Graphics g) { super.paint(g); System.out.println("paint "+(++n)); List<String> list = Arrays.asList("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); Collections.shuffle(list); g.setColor(Color.BLACK); for (int i=0; i<list.size(); i++) g.drawString(list.get(i), 10+10*i, 45); } }; frame.setSize(90,60); frame.setVisible(true); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
25 mai 2013 à 16:10
Remarque : il est important que l'affichage de l'image soit après le super.paint et avant l'affichage des chiffres car tout est superposé.
25 mai 2013 à 16:28
Il faut surement rajouter quelque chose dans l'en-tête mais je ne trouve pas quoi...
25 mai 2013 à 16:30
25 mai 2013 à 16:48
Maintenant, est-ce que je peux charger toutes les images avec:
puis les classer dans un tableau du genre:
pour pouvoir les appeler ensuite avec quelque chose du genre:
??
25 mai 2013 à 19:02