IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Mettre une animation derrière les composants


Sujet :

Java

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Par défaut Mettre une animation derrière les composants
    Bonjour,
    Je fais un petit jeu et à la fin de la partie je souhaiterais une petite animation qui remplit progressivement le fond d'écran de "Bravo !" mais que le fond, pas sur les boutons. C'est bien là mon problème, mes boutons sont surchargés par les écritures, on ne les voit plus.
    Autre chose : Cette animation s'arrête lorsqu'on clique n'importe où sur l'écran.

    J'obtiens bien ce résultat si j'abandonne l'animation : en mettant la boucle à l'intérieur de paintComponent. Mais comment y ajouter la thread et voir progressivement les "Bravo !" s'inscrire un par un progressivement ?

    Je ne peux pas non plus faire une animation ponctuée de repaint() car sinon je n'ai que le dernier "Bravo !" et je perds tous les précédents.

    Je vous joins mon code (une version très très simplifiée).
    Merci pour toute l'aide que vous voudrez bien m'apporter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
     
    public class essai 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;
     
    	    MaThread(JPanel panneauDisque) { //----------- Constructeur
    	    	this.panneauDisque = panneauDisque;
    	    }
     
    	   synchronized void stopper() {  //------------ Pour arreter la Thread
    		  finir = true;
    		  notify();
    	    }
     
    	    public void run() {   //------------------- Démarrage de la Thread
    		int L = panneauDisque.getSize().width;
    		int H = panneauDisque.getSize().height;
    		Graphics g = panneauDisque.getGraphics();
    		Graphics2D g2d = ( Graphics2D ) g.create();
    	        g2d.setFont( new Font( "Tiresias PCFont Z", Font.BOLD, 40 ) );
    		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) {}
    		    	if (finir) break;  
    		    	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 selon une spirale
    		    	y = (int) (H/2 - r*Math.sin(i*Math.PI/6));
    		    	g2d.drawString( "Bravo !", x, y );
    		 }
    	    }  // Fin de la méthode run de la thread
    	} //Fin de la classe MaThread
     
    	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;
     
    		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);
    			Graphics2D g2d = ( Graphics2D ) g.create();
    		        /*
    			 *   (diverses instructions)
    			 */
    		} // 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);
    						     thread.start(); // animation
    							}
    		       getContentPane().addMouseListener(new MouseAdapter(){
    				        public void mousePressed(MouseEvent e){
                                          //arrêt de l'animation dès qu'on clique sur l'écran
    				                if (thread != null) thread.stopper();
    				                 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);
    	}
    }
    Images attachées Images attachées  

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/03/2007, 16h52
  2. [c#] Mettre une fenêtre derrière les icones du bureau
    Par MoTUmBo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/03/2007, 12h56
  3. une question sur les composants
    Par m14w dans le forum Delphi
    Réponses: 2
    Dernier message: 17/05/2006, 19h26
  4. Réponses: 6
    Dernier message: 14/12/2004, 02h47
  5. [Swing] Mettre une police à tous les composants
    Par MrEddy dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/05/2004, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo