feria35 | Voici une solution :
Code :
- import java.awt.Color;
- import java.awt.FlowLayout;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.image.BufferedImage;
- import javax.swing.JApplet;
- import javax.swing.JButton;
- import javax.swing.JPanel;
- public class essai2 extends JApplet {
- private static final long serialVersionUID = 1L;
- class MaThread extends Thread { //============================= Classe MaThread
- int r = 0, x = 0, y = 0;
- boolean finir;
- JPanel panneauDisque;
- ImageHandler image;
- MaThread(JPanel panel,ImageHandler image) { //----------- Constructeur
- this.panneauDisque=panel;
- this.image = image;
- }
-
- synchronized void stopper() { //------------ Pour arreter de la Thread
- finir = true;
- notify();
- }
-
-
- public void run() { //------------------- Démarrage de la Thread
- finir = false;
- //Animation = Ecrire pleins de "Bravo !" dans le fond d'écran
- //Cette Animation s'arrête si on clic sur l'écran (finir -> false)
- for (int i = 0; i < 30; i++) {
- try { sleep(200); }
- catch (InterruptedException exc) {finir=true; break;}
- if (finir) break;
- int L = panneauDisque.getSize().width;
- int H = panneauDisque.getSize().height;
- Graphics2D g2d = image.getImage(L,H).createGraphics();
- g2d.setFont( new Font( "Tiresias PCFont Z", Font.BOLD, 40 ) );
- g2d.setColor(new Color((528424*i)%Integer.MAX_VALUE)); //variation de couleur
- r += 10 ;
- x = (int) (L/2 + r*Math.cos(i*Math.PI/6)); //coordonnées d'une spirale
- y = (int) (H/2 - r*Math.sin(i*Math.PI/6));
- g2d.drawString( "Bravo !", x, y );
- g2d.dispose();
- repaint();
- }
- } // Fin de la méthode run de la thread
- } //Fin de la classe MaThread
- public class ImageHandler {
- BufferedImage image = null;
- public BufferedImage getImage() {
- return image;
- }
- public BufferedImage getImage(int width, int height) {
- if ( (width>0 && height>0 ) && (image==null || image.getWidth()<width || image.getHeight()<height) ) {
- // si la taille du panel est > 0, si l'image n'existe pas ou que l'image précédente était plus petite, on créé une nouvelle image
- BufferedImage newimage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
- if (image!=null) {
- // on dessine l'image précédente dans la nouvelle image, pour ne pas perdre les "bravos" précédents
- Graphics2D g=newimage.createGraphics();
- g.drawImage(image, 0,0, null);
- g.dispose();
- }
- image=newimage;
- }
- return image;
- }
- }
- class PanneauCentre extends JPanel { //======================= Classe PanneauCentre
- private static final long serialVersionUID = 1L;
- JButton boutonGagné;
- JButton[] pion = new JButton[15];
- boolean bravo = false, finir = false;
- MaThread thread = null;
- JPanel panneau;
- ImageHandler imageHandler = new ImageHandler() ;
- public PanneauCentre () { //-------------------------------------- Constructeur
- setLayout(new FlowLayout());
- //Remplissage de la grille avec des boutons et des labels
- for (int k=0 ; k<pion.length; k++) {
- pion[k] = new JButton("bouton"+k);
- pion[k].setEnabled(false);
- add(pion[k]);
- JPanel vide = new JPanel();
- add(vide);
- }
- boutonGagné = new JButton ("Valider la partie" );
- add(boutonGagné);
- this.panneau = this;
- jeu(); //on lance le jeu
- } // Fin du constructeur PanneauCentre
- public void paintComponent(Graphics g) { //----- Toile de fond paintComponent
- int L = this.getSize().width;
- int H = this.getSize().height;
- super.paintComponent(g);
- if (imageHandler.getImage() != null) g.drawImage(imageHandler.getImage(), 0, 0, null);
- } // Fin de PaintComponent
- public void jeu() { //----------------- Une partie de jeu
- /*
- * le déroulement du jeu (diverses instructions)
- */
- boutonGagné.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e) { //validation de la partie
- bravo = true;
- if ((thread == null)||(!thread.isAlive())) {
- thread = new MaThread(panneau,imageHandler);
- thread.start(); // déclenchement de l'animation
- }
- getContentPane().addMouseListener(new MouseAdapter(){
- public void mousePressed(MouseEvent e){ //arrêt de l'animation dès
- if (thread != null) thread.stopper(); //qu'on clique sur l'écran
- thread = null;
- }
- public void mouseReleased(MouseEvent e){
- if (thread != null) thread.stopper();
- thread = null;
- }
-
- public void mouseEntered(MouseEvent e) { }
-
- public void mouseExited(MouseEvent e) { }
- });
- }
- });
- } //Fin de la méthode "jeu"
- }//Fin de la classe PanneauCentre
- public void init() {
- this.setSize(250, 250);
- JPanel panneau = new PanneauCentre();
- getContentPane().add(panneau);
- }
- }
|
|