Salut,
Ce programme crée une fenêtre (JFrame) : il y a un JPanel destiné à afficher des balles (appelée Panneau), et un 2 boutons, un pour ajouter une balle à Panneau (Lancer), et un pour arrêter le programme (Quitter).
Une balle est "modélisée" par la classe Balle, qui a une méthode qui permet de la déplacer, déplace(Rectangle2D) : elle ajoute 5 à ses coordonnées x et y actuelles, et teste (mal) si elle sort du rectangle correpondant à la taille du panneau qu'on passe en paramètre de la méthode : si c'est le cas, on inverse le sens de déplacement. Il en résulte que la balle rebondira sur les bord du panneau. La balle est représentée graphiquement par un disque de 40 pixels de diamètre (exactement par une ellispe de 40 de diametres horizontal et vertical).
La bouton Lancer appelle la méthode ajoutBalle() qui :
- créer une balle (créer une instance de classe Balle) ;
- ajoute cette balle au panneau (qui mémorise toutes les balles ajoutées dans une liste (ArrayList<Balle>)
- lance un thread dont le code utile est dans la classe BalleSeparée (donc un nouveau thread par balle)
BalleSéparée est une implémentation concrète de l'interface Runnable, dont l'unique méthode run() contient le code exécuté par le thread. Cette méthode run() contient une boucle infinie qui fait sans arrêt (enfin, jusqu'à ce qu'on arrête le programme quand même) :
- appelle la méthode Balle.deplace(), donc déplace la balle (donc de 5 pixels en x et y) et fait le test du rebond
- demande de redessiner le panneau (pour qu'on voit l'effet sur l'affichage du déplacement qui vient d'être effectué) par l'appel de repaint() sur panneau.
- attend 10 ms et recommence
La méthode qui fait l'affichage de Panneau est sa méthode paintComponent(), redéfinie pour le besoin, et qui est automatiquement appelée en conséquence de l'appel de repaint() dans BalleSéparée : elle indique qu'on veut peindre en rose (PINK), puis elle parcourt la liste de balles, pour remplir chaque ellipse correspondante (en rose donc).
PS ce programme ne respecte que peu les conventions Java, se trompe dans le traitement du rebond (rebondit trop tôt), utilise des accents dans un nom de classe (à absolument éviter), et j'en passe. Beaucoup de chose qui ne devrait pas être prises en exemple.
Partager