A voir également:
- Mettre une animation derrière les composants
- Connaitre les composants de son pc - Guide
- Tester les composants de son pc - Guide
- Dans le document à télécharger, trouvez les lettres situées derrière les rectangles pour reconstituer le nom du chat. comment s'appelle-t-il ? - Forum Jeux vidéo
- Savoir qui se cache derrière un faux compte instagram ✓ - Forum Vos droits sur internet
- Fond d'ecran iphone heure derriere - Guide
1 réponse
Voici une solution :
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); } }