Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème maj graphique

    16 octobre 2010 à 17:12:38

    Bonjour,

    Je débute en JAVA et je viens déjà de tomber sur un problème lors de tests basés sur le tuto du site (très bien fait d'ailleurs).

    En fait l'animation fonctionne lorsque la méthode qui la gère est appelée dans le constructeur mais si je passe par un quelconque évènement, actionPerformed par exemple ; alors là l'animation fonctionne (les valeurs des variables changent) mais l'affichage à l'écran est effectué à la fin de celle-ci. En gros je ne vois que le résultat lorsque la l'animation est terminée, pendant les opérations l'affichage se bloque.





    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.Dimension;
    
    
     
    public class Fenetre extends JFrame implements ActionListener
    {
    	private JPanel menu ;
    	private JPanel cards;
    	private Ecran jeu ;
    	private JButton btnCommencer;
    
    	public Fenetre()
            {     
    		menu = new JPanel();
    		jeu = new Ecran();
    		cards = new JPanel(new CardLayout());
    		
    		this.setTitle("Application");
    		this.setSize(720,540);
            	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            	this.setLocationRelativeTo(null);
            
            	//Panel menu
            	btnCommencer = new JButton("Commencer");
            	menu.add(btnCommencer);
            	btnCommencer.addActionListener(this);
            
            
            	//CardLayout pour changement du panel
            	cards.add(menu, "MENUPANEL");
            	cards.add(jeu, "JEUPANEL");
    
            	//cl.show(cards, MENUPANEL); 
            	//inutile première Card par défaut
            
            	this.setContentPane(cards);
            	this.setVisible(true);
            
            	<gras>//pas de problèmes si exécuté dans le constructeur</gras>
            	/*CardLayout cl = (CardLayout)(cards.getLayout());
    		cl.show(cards, "JEUPANEL"); 
    		go();*/
    
            }
    	
    	public void actionPerformed(ActionEvent arg0)  <gras>//problème : maj graphique à la fin</gras>
    	{
    		Object obj = arg0.getSource();
    
    		if (obj == btnCommencer)
    		{
    			CardLayout cl = (CardLayout)(cards.getLayout());
    		    cl.show(cards, "JEUPANEL"); 
    		    go();
    		}
    	}
    	
    	private void go()
    	{
    		
            	for(int i = -50; i < jeu.getWidth() / 2; i++)
            	{
                    	int x = jeu.getPosX();
                    	int y = jeu.getPosY();
                    	x++;
                    	y++;
                    	jeu.setPosX(x);
                    	jeu.setPosY(y);
                    	jeu.repaint();  
                    	try
                    	{
                    		Thread.sleep(10);
                    	}
                    	catch (InterruptedException e)
                    	{
                    		e.printStackTrace();
                    	}
            	}
            
    	}
    
    }
    



    Même en forcant avec un repaint() rien n'y fait.
    Quelqu'un saurait pourquoi sachant que ma prof d'info n'as pas su me répondre ?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      16 octobre 2010 à 18:54:19

      salut,
      essaye un revalidate avant le repaint.

      bonne chance
      • Partager sur Facebook
      • Partager sur Twitter
        16 octobre 2010 à 19:41:40

        Merci de ta réponse mais c'est toujours la même chose le changement visuel de panel s'effectue après la méthode go() quand c'est dans l'actionPerformed :(
        • Partager sur Facebook
        • Partager sur Twitter
          21 octobre 2010 à 0:04:47

          Je pense que le problème vient du fait que tu clique sur un bouton et que ton repaint() est bloqué a cause du changement d'état du bouton.

          Mais si tu lance ta méthode go() dans un thread séparée ça devrait marcher.
          • Partager sur Facebook
          • Partager sur Twitter
          J'ai tous les badges d'OpenClassrooms.

          problème maj graphique

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown