Partage
  • Partager sur Facebook
  • Partager sur Twitter

code correct ne marche pas

interface graphique

Sujet résolu
    24 mai 2009 à 19:54:08

    salut a tous,
    j'ai écrit un programme java de simulation de «ballons», se
    d´eplacant aleatoirement, grossissants et explosant lorsqu’ils ont atteint une certaine taille.malheureusement le ballon ne s'affiche pas :( .quelqu un peut m'aider.voila le code
    import java.awt.Color;
    
    
    public class Ballon {
    private int x,y,taille;
    private  Color c;
    private int life;
    public Ballon(int x,int y,int taille,Color c){
    	this.x=x;
    	this.y=y;
    	this.taille=taille;
    	this.c=c;
    	this.life=0;
    	
    }
    
    int getX(){return x;}
    public void setX(int x){
    	this.x=x;
    }
    public int getY(){return y;}
    public int getTaille(){return taille;}
    public Color getColor(){return c;}
    
    public void deplace(){
    	if (2*Math.random()>1)
    		x+=1;
    		else 
    			x-=1;
    	
    	if (2*Math.random()>1)
    		y+=1;
    	else 
    		y-=1;
    	life+=1;
    	if (life%50==0)
    	   taille+=1;
    	}
    }
    

    pour zonedessin
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    
    import javax.swing.JPanel;
    
    
    public class ZoneDessin extends JPanel {
    	private int height,length;
    	private ListeBallon model;
    	
    	
    	public ZoneDessin(int height,int length, ListeBallon model){
    		super();
    		this.height=height;
    		this.length=length;
    		this.model=model;
    	}
    	
    	public void pointComponent(Graphics g){
    		super.paintComponent(g);
    		g.setColor(Color.white);
    		g.fillRect(0,0,length,height);
    		
    		for(int i=0;i<model.size();i++){
    			Ballon b=model.get(i);
    			g.setColor(b.getColor());
    			g.fillOval(b.getX()- b.getTaille()/2, b.getY()- b.getTaille()/2, b.getTaille(),b.getTaille());
    		
    		}
    	}
    	public  Dimension getPrefferedSize(){
    		return new Dimension(length,height);}
    	}
    

    et le guiballon
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.Timer;
    
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    
    
    public class GuiBallon {
    	private ZoneDessin zone;
    	private ListeBallon model;
    	private JComboBox combo;
    	
    	private Color [] codeCouleur ={Color.red,Color.blue,Color.green};
    	
    	private String [] couleur={"rouge","bleu","vert"};
    	
    	public GuiBallon (){
    		final JFrame f=new JFrame();
    		model=new ListeBallon();
    		
    		model.add(new Ballon(150,150,10,Color.BLACK));
    		zone =new ZoneDessin(300,300,model);
    		
    		zone.addMouseListener(new MouseAdapter(){
    			
    			public void mouseClicked(MouseEvent e){
    				model.add(new Ballon(e.getX(),e.getY(),10,codeCouleur[combo.getSelectedIndex()]));
    				zone.repaint();
    				f.add(zone);
    			}
    		});
    		
    	}
    	
    	ActionListener avance=new ActionListener(){
    		
    	
    		public void actionPerformed(ActionEvent e){
    			model.deplace();
    			zone.repaint();}};
    			
    			
    		new Timer(100,avance).start();
    		
    			combo=new JComboBox(couleur);
    			f.getContentPane().add(combo,BorderLayout.SOUTH);
    			f.setLocationRelativeTo(null);
    			f.pack();
    			f.setVisible(true);}
    	
    	
    	public static void main (String []args){
    		new GuiBallon();
    		
    
    }
    }
    


    je sais que c'est long ,mais j'épere que vous pourriez m'aider.
    merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2009 à 20:03:20

      Dans zondessin tu as écrit cela à la ligne 20 => public void pointComponent(Graphics g){
      au lieu de cela => public void paintComponent(Graphics g){


      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2009 à 20:09:40

        resalut
        ah je suis stupide!! je vais ressayer.

        apparement le ballon s'affiche mais ne grandit pas :(:( aul qun peut m'aider
        merci beaucoup
        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2009 à 20:33:41

          Euh problème là, déjà, pour commencer, tu modifie ta vrariable de type JFrame dans actionPerformed hors que elle est déclarée final, et le ActionListener, oulalala, je vois un peut ce que tu as voulu faire mais pour corriger tout ça...

          D'abord le timer pourquoi l'utiliser, il n'est pas indispensable, et là une classe ActionListener et ta méthode actionPerformed ne pourra pas être appelée vu que tu n'a ajouté aucun actionListener sur ta JFrame, je penses que ta classe qui pose problème c'est GuiBallon, je ne sais pas trop mais je devien ce que tu veux faire.
          Déjà pour afficher la zone de dessin fait ceci :
          public class GuiBallon {
          	private ZoneDessin zone;
          	private ListeBallon model;
          	private JComboBox combo;
          	
          	private Color [] codeCouleur ={Color.red,Color.blue,Color.green};
          	
          	private String [] couleur={"rouge","bleu","vert"};
          	
          	public GuiBallon (){
          		JFrame f=new JFrame();
          		model=new ListeBallon();
          		
          		model.add(new Ballon(150,150,10,Color.BLACK));
          		zone =new ZoneDessin(300,300,model);
          		
          		zone.addMouseListener(new MouseAdapter(){
          			
          			public void mouseClicked(MouseEvent e){
          				model.add(new Ballon(e.getX(),e.getY(),10,codeCouleur[combo.getSelectedIndex()]));
          				zone.repaint();
          				f.add(zone);
          			}
          		});
                          combo=new JComboBox(couleur);
          		f.getContentPane().add(combo,BorderLayout.SOUTH);
          		f.setLocationRelativeTo(null);
          		f.pack();
          		f.setVisible(true);
          		deplacerLesBallons ();
          	}
          }
          


          Maintenant pour déplacer les ballons je ne sais pas si tu as vu lu le tutoriels de cysboy ou il déplace un cercle sur sa fenêtre, bah tu fait une boucle infinie dans laquelle tu déplace tes ballons :
          public void deplacerLesBallons () {
                 while (true) {
                        model.deplace();
          	      zone.repaint();
                        try {
                            Thread.sleep(100);
                         } catch (InterruptedException e) {
                            e.printStackTrace ();
                         }
                 }
          }
          


          Euh sinon je ne connais pas très bien les timers, mais vu le code si il s'affiche mais qu'il ne se déplace pas c'est normal, actionPerformed et actionListener son utilisés pour les clics sur des boutons, donc tu peux le virer il sert un peut à rien en quelque sorte.
          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2009 à 20:40:45

            salut
            j'ai utilisé timer afin de faire se
            d´eplacer tous les ronds toutes les 100ms.et pour la methode deplacer .ils ne deplacent pas.oui j'ai lu le code de cysboy.mais mes ballons d´eplacant aleatoirement, GROSSISSANT et EXPLOSANT(j'ai utilisé romove) lorsqu’ils ont atteint une certaine.
            mais ca ne marche toujours pas.
            merci
            taille.
            • Partager sur Facebook
            • Partager sur Twitter
              24 mai 2009 à 20:44:31

              Et tu sais qu'il existe une classe ArrayList :
              ArrayList<Ballon> ballons = new ArrayList<Ballon> ();
              ballons.add (new Ballon(...));
              ballons.remove(ballon);
              


              Enfin voilà, sinon qu'est ce qui ne marche pas exactement avec le tutos de cysboy, les ballons ne se déplacent pas ?

              • Partager sur Facebook
              • Partager sur Twitter
                24 mai 2009 à 20:48:34

                resalut
                voila ca va peut etre vous éclairez pour ce que je vous realiser
                .8 : Modifier GuiBallon.java afin d’ajouter un rond rouge de taille 10
                au modele a l’endroit ou l’on a clique. Utiliser la methode repaint() pour rafraichir la
                vue.
                9 : Modifier Ballon.java afin que le rond se deplace d’un pixel dans
                une direction a´eatoire lorsque l’on appelle sa methode deplace().
                1 : Modifier ListeBallons.java afin que sa methode deplace() deplace
                tous les ronds de la liste.
                11 : Utiliser la classe Timer du package javax.swing afin de faire se
                deplacer tous les ronds toutes les 100ms
                • Partager sur Facebook
                • Partager sur Twitter
                  24 mai 2009 à 20:57:10

                  Ha purée, je ne sais pas trop comment fonctionne les Timer, mais si il prennent obligatoirement un objet de type ActionListener (...) ça risque de poser problème.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 mai 2009 à 20:57:57

                    resalut
                    oui ils deplacent mais ne grandissent pas et n'explosent pas.mes ballons s'affichent en utilisant ce code mais GROSSISSANT, EXPLOSANT.
                    oui,désolé voila la classe listballon,j'ai pas voulu vous fatiguer .
                    package mer;
                    
                    import java.util.ArrayList;
                    
                    public class ListBallon{
                    	private ArrayList<Ballon> List;
                    	public ListBallon(){
                    		List=new  ArrayList<Ballon> ();
                    	}
                    	public void add(Ballon n){
                    		List.add(n);
                    	}
                    	public int size(){return List.size();}
                    	public Ballon get(int i){
                    		return List.get(i);
                    	}
                    	public void deplace(){
                    		for(int i=0;i<List.size();i++){
                    			Ballon n=List.get(i);
                    			if(n.getTaille()<50)
                    				n.deplace();
                    				else
                    					List.remove(n);
                    			}
                    		}
                    	}
                    

                    merci
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 mai 2009 à 21:08:58

                      Ha ils se déplacent, mais alors là c'est un tout autre problème, ... donc taille ne s'incrémente pas sans doute c'est ça ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 mai 2009 à 21:09:20

                        Y'a aucun soucis avec les Timer, la méthode actionPerformed est déclenchée toutes les 100 ms. Donc que faut-il faire dans cette méthode ?
                        • déplacer les ballons
                        • dessiner les ballons avec leurs coordonnées à jour

                        rockangel je te renvoie à ton premier topic à ce sujet ça peut peut-être t'intéresser
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 mai 2009 à 21:17:09

                          resalut
                          non ,ils ne se déplacent pas .désolée.il juste s'affichent avec lma couleur choisi de comobox.mais ne grandissent pas et n éxplosent pas :(
                          elmh,
                          j'ai essayer de le reconsulter mais ca ne solve toujours pas le probleme.
                          merci
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 mai 2009 à 21:21:58

                            Difficile de t'aider pour le moment en ce qui me concerne, je dois rafistoler tout ton code pour arriver à le compiler.
                            C'est pas très rigoureux tout ça.

                            Par ailleurs d'après ce que tu dis tu as réussi à compiler ton code, c'est ça qui m'impressionne le plus étant donné que les codes postés sont truffés d'erreurs.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              24 mai 2009 à 21:22:25

                              Ha oké attends j'vé essayer ton code pour voir.
                              Bah chez moi il grossit mais très lentement, normal tu augmente la taille de 1 à chaque fois.

                              J'ai juste modifier la classe GuiBallon, et voilà je viens de comprendre comment ça marche les Timer!

                              import java.awt.Color;
                              import java.awt.Dimension;
                              import java.awt.Graphics;
                              
                              import javax.swing.JPanel;
                              
                              
                              public class ZoneDessin extends JPanel {
                              	private int height,length;
                              	private ListeBallon model;
                              	
                              	
                              	public ZoneDessin(int height,int length, ListeBallon model){
                              		super();
                              		this.height=height;
                              		this.length=length;
                              		this.model=model;
                              	}
                              	
                              	public void paintComponent(Graphics g){
                              		super.paintComponent(g);
                              		System.out.println("paint");
                              		g.setColor(Color.white);
                              		g.fillRect(0,0,length,height);
                              		
                              		for(int i=0;i<model.size();i++){
                              			Ballon b=model.get(i);
                              			g.setColor(b.getColor());
                              			g.fillOval(b.getX()- b.getTaille()/2, b.getY()- b.getTaille()/2, b.getTaille(),b.getTaille());
                              		
                              		}
                              	}
                              	public  Dimension getPrefferedSize(){
                              		return new Dimension(length,height);
                              	}
                              }
                              

                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 mai 2009 à 21:34:52

                                resalut
                                truffés d'erreurs???
                                llolilight merci beaucoup.j en ai vraiment besoin
                                gracias
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  24 mai 2009 à 21:39:06

                                  Non chez moi il marche c'est juste que ton ballon grossis très lentement.
                                  Oui je confirme j'ai mis +10 au lieu de +1 et ils grandissent plus vite, par contre il y a un effet qui fait en sorte que on voit le ballon grossir pas tout les 100 millisecondes mais toutes les 2-3 secondes.
                                  Sans doute un problème du à la pixellisation, mais ça je ne vois pas comment le régler.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    24 mai 2009 à 22:51:15

                                    Voilà ce que j'utilise et c'est fonctionnel selon tes consignes.
                                    import java.awt.BorderLayout;
                                    import java.awt.Color;
                                    import java.awt.event.ActionEvent;
                                    import java.awt.event.ActionListener;
                                    import java.awt.event.MouseAdapter;
                                    import java.awt.event.MouseEvent;
                                    
                                    import javax.swing.JComboBox;
                                    import javax.swing.JFrame;
                                    import javax.swing.Timer;
                                    
                                    
                                    public class GuiBallon extends JFrame {
                                    	private ZoneDessin zone;
                                    	private ListeBallon model;
                                    	private JComboBox combo;
                                    	
                                    	private Color [] codeCouleur ={Color.red,Color.blue,Color.green};
                                    	
                                    	private String [] couleur={"rouge","bleu","vert"};
                                    	
                                    	public GuiBallon () {
                                    		combo = new JComboBox(couleur);
                                    		model = new ListeBallon();
                                    		model.add(new Ballon(150, 150, 10, Color.BLACK));
                                    		zone = new ZoneDessin(300, 300, model);
                                    		
                                    		zone.addMouseListener(new MouseAdapter() {
                                    			public void mouseClicked(MouseEvent e) {
                                    				model.add(new Ballon(e.getX(), e.getY(), 10, codeCouleur[combo.getSelectedIndex()] ) );
                                    				zone.repaint();
                                    			}
                                    		});
                                    		new Timer(100, new ActionListener () {
                                    			public void actionPerformed(ActionEvent e) {
                                    				model.deplace();
                                    				zone.repaint();
                                    			}
                                    		}).start();
                                    		
                                    		getContentPane().add(zone, BorderLayout.CENTER);
                                    		getContentPane().add(combo, BorderLayout.SOUTH);
                                    		setLocationRelativeTo(null);
                                    		setSize(400, 400);
                                    		setDefaultCloseOperation(EXIT_ON_CLOSE);
                                    		setVisible(true);
                                    	}
                                    	
                                    	public static void main (String []args) {
                                    		javax.swing.SwingUtilities.invokeLater(new Runnable() {
                                    			public void run() {
                                    				new GuiBallon();
                                    			}
                                    		});
                                    	}
                                    	
                                    }
                                    

                                    import java.awt.Color;
                                    import java.awt.Dimension;
                                    import java.awt.Graphics;
                                    
                                    import javax.swing.JPanel;
                                    
                                    
                                    public class ZoneDessin extends JPanel {
                                    	private int height, length;
                                    	private ListeBallon model;
                                    	
                                    	public ZoneDessin(int height, int length, ListeBallon model) {
                                    		super();
                                    		setPreferredSize(new Dimension(length, height));
                                    		this.height = height;
                                    		this.length = length;
                                    		this.model = model;
                                    	}
                                    	
                                    	public void paintComponent(Graphics g) {
                                    		super.paintComponent(g);
                                    		g.setColor(Color.white);
                                    		g.fillRect(0, 0, length, height);
                                    		
                                    		for(int i = 0 ; i < model.size() ; i++) {
                                    			Ballon b = model.get(i);
                                    			g.setColor(b.getColor());
                                    			g.fillOval(b.getX()- b.getTaille()/2, b.getY() - b.getTaille()/2, b.getTaille(), b.getTaille() );
                                    		}
                                    	}
                                    
                                    }
                                    

                                    import java.awt.Color;
                                    
                                    public class Ballon {
                                    	private int x,y,taille;
                                    	private  Color c;
                                    	private int life;
                                    	public Ballon(int x, int y, int taille, Color c) {
                                    		this.x=x;
                                    		this.y=y;
                                    		this.taille=taille;
                                    		this.c=c;
                                    		this.life=0;
                                    	}
                                    
                                    	int getX(){return x;}
                                    	public void setX(int x){
                                    		this.x=x;
                                    	}
                                    	public int getY(){return y;}
                                    	public int getTaille(){return taille;}
                                    	public Color getColor(){return c;}
                                    
                                    	public void deplace() {
                                    		if (2*Math.random()>1)
                                    			x++;
                                    		else 
                                    			x--;
                                    
                                    		if (2*Math.random()>1)
                                    			y++;
                                    		else 
                                    			y--;
                                    			
                                    		life++;
                                    			
                                    		if (life%4 == 0)
                                    			taille++;
                                    	}
                                    }
                                    

                                    import java.util.ArrayList;
                                    
                                    public class ListeBallon {
                                    	private ArrayList<Ballon> liste;
                                    	
                                    	public ListeBallon() {
                                    		liste = new ArrayList<Ballon> ();
                                    	}
                                    	public void add(Ballon n) {
                                    		liste.add(n);
                                    	}
                                    	public int size() {
                                    		return liste.size();
                                    	}
                                    	public Ballon get(int i) {
                                    		return liste.get(i);
                                    	}
                                    	
                                    	public void deplace() {
                                    		for(int i = 0 ; i < liste.size() ; i++) {
                                    			Ballon n = liste.get(i);
                                    			if(n.getTaille() < 50)
                                    				n.deplace();
                                    			else
                                    				liste.remove(n);
                                    		}
                                    	}
                                    	
                                    }
                                    


                                    J'ai modifié deux trois choses (entre autres la taille des ballons augmente assez rapidement maintenant).
                                    Comme je l'ai dit c'est juste fonctionnel, à toi de voir ce dont tu as besoin exactement.
                                    Néanmoins j'aurais préféré ma méthode plus orientée objet (celle que j'ai décrite dans le premier topic) pour bien séparer qui fait quoi.
                                    Si en plus tu dois implémenter MVC là dedans, t'as plutôt intérêt à discerner les méthodes de tes objets (par exemple là tes ballons ne savent pas se dessiner).
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      24 mai 2009 à 23:32:14

                                      elmh,
                                      merci pour votre aide j'éspere que ca va marcher ..
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      code correct ne marche pas

                                      × 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