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 :

probleme pour générer des objets aleatoirement


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Par défaut probleme pour générer des objets aleatoirement
    Bonjour ,
    Je souhaiterai faire une classe me permettant en appuyant sur un bouton de générer aléatoirement dans un applet un objet (exemple un carré)

    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
    				/** Un rectangle est caractérise par sa largeur et sa hauteur
                    *   la largeur et la hauteur sont des entiers positifs 
                    *  @author 
                    *  
                    */
    import java.awt.Color;
    import java.awt.Graphics; 		
    public class Rectangle {
    	private int nombre=0;	
    	private double largeur, hauteur ;
    	    private float x ; // abcisse du coté du rectangle
    	    private float y ; // ordonnee du coté du rectangle
    		public Maclasse(){this((float)(Math.random())*500,(float)(Math.random())*500,5,5);}
    	    public Rectangle (float xInit, float yInit, double l, double h){this.largeur=l;this.hauteur=h;this.x=xInit;this.y=yInit; }
     
    	    /** Obtenir le nombre  de Rectangle
                    *   @return le nombre de pierre */
    	  public int getNombre(){return this.nombre;}
    	/** fixer le nombre de Rectangle
            *   @param Nombre de Rectangle */
    	  public void setNombre(int a){this.nombre=a;}
    	/** Obtenir l'ordonnée  du Rectangle
            *   @return l'ordonnée du coté en haut a gauche */
     
    	    /** Obtenir l'abscisse  du Rectangle
                    *   @return l'abscisse du coté en haut a gauche */
    	  public double getX(){return this.x;}
    	/** fixer l'abscisse  du Rectangle
            *   @param l'abscisse du coté en haut a gauche */
    	  public void setX(float a){this.x=a;}
    	/** Obtenir l'ordonnée  du Rectangle
            *   @return l'ordonnée du coté en haut a gauche */
    	  public double getY(){return this.y;}
    /** fixer l'ordonnée  du Rectangle
    *   @param l'ordonneé du coté en haut a gauche */
    	  public void setY(float a){this.y=a;}
     
    	    /** Obtenir la largeur du Rectangle
                            *   @return la largeur */
    		public double getLargeur(){return this.largeur;}
     
    			/** Obtenir la hauteur du Rectangle
                            *   @return la hauteur */
    		public double getHauteur(){return this.hauteur;}
     
    			/** fixer la largeur du Rectangle
                            *   @param la largeur */
    			public void setLargeur(double l){this.largeur=l;}
     
    			/** fixer la hauteur du Rectangle
                            *   @param la hauteur */
    		public void setHauteur(double h){this.hauteur=h;}
     
    		public double surface(){return this.hauteur*this.largeur;}
     
     
    			/** Dessiner autant de d'objet sur le terrain que voulu */
    		//public void Terrain(Color c,){for(int i=0 ; i<this.nombre ; i++) }
     
    		public void dessiner(Graphics g, Color c){
    	         g.setColor(c);
    	         for(int i=0;i<nombre;i++){g.drawRect((int)Math.random(), (int)Math.random(), (int)this.getLargeur(), (int)this.getHauteur());
    	     this.dessiner(g, c);}
    			} }

    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
     
    	import java.applet.Applet;
    import java.awt.*;
     
    import java.applet.Applet;
    import java.awt.*;
    import java.awt.event.* ;
     
    public class TestRectangle extends Applet implements ActionListener {         private Button +Rectangle = new Button("+ Rectangle") ;
      Rectangle Rect1=new Rectangle();
     
       public void init(){
          this.add(+Rectangle);
          +Rectangle.addActionListener(this);
    }
     
     
     
     
       public void actionPerformed(ActionEvent e){
          if(e.getActionCommand() == "+ Rectangle"){( rect1.setNombre(rect1.getNombre()+1) ; repaint();}
          }
     
       public void paint(Graphics g) {  
          g.drawRect(5,5,Cercle.xMax-5,Cercle.yMax-5)
     
          pierre.dessiner(g, Color.ORANGE);
       }
     
     
     
     
    	}
    Le mieux serait de mettre des rectangles dans un tableau si cela est possible ? (un tableau a plusieurs dimensions)
    Merci d'avance de votre aide
    Et j'ai une erreur de compilation sur rect1.setNombre(rect1.getNombre()+1) ; repaint();}
    pourquoi cela est il faux ?

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Tu as une parenthèse en trop.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void actionPerformed(ActionEvent e){
          if(e.getActionCommand() == "+ Rectangle"){(  // Parenthèse qui sert à rien
                 rect1.setNombre(rect1.getNombre()+1) ; 
                 repaint();
          }
    }
    Et surtout ne pas utiliser == pour comparer les String mais s1.equals(s2).

    Le mieux étant de mettre "taConstante".equals(taValeurATester) ca évite les NullPointerException. Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void actionPerformed(ActionEvent e){
          if("+ Rectangle".equals(e.getActionCommand())){
                 rect1.setNombre(rect1.getNombre()+1) ; 
                 repaint();
          }
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Par défaut
    Merci
    Mais j'ai un autre problème au lieu de me générer un seul rectangle il m'en génère plein plein et je ne vois pas ou j'ai pu lui demander ça puisque j'ai définit la variable nombre a 0 du coup au départ je devrai rien avoir non ?
    Et puis je laisser mes carré comme ça ou je dois les stocker dans une liste?
    Merci d'avance

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    De ce que j'ai compris vite fait :

    A chaque clic tu incrémentes un nombre de rectangle.
    Et tu en dessine le nombre qui se trouve dans Rectangle.

    Donc au premier clic il t'en dessine 1.
    Donc au deuxième clic il t'en dessine 2.
    Donc au troisième clic il t'en dessine 3.
    ...
    Donc au premier clic il t'en dessine N.


    Quel est le problème exactement ?
    Il t'en dessine combien à chaque clic ?


    De toute façon il y a quelque chose de louche dans ton code...

    Ton application devrait avoir une List<Rectangle>
    A chaque clic, dans le actionPerformed, au lieu d'incrémenter "nombre" tu devrait construire un nouveau rectangle et l'ajouter à ta liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void actionPerformed(ActionEvent e) {
        Rectangle rect = new Rectangle(x, y , l, h);
        listeRectangles.add( rect );
        repaint();
    }
    Ensuite dans la méthode paint de ton Applet, tu dessines tous tes rectangles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void paint(Graphics g) {  
          for(Rectangle rect : listeRectangles) {
               rect.dessiner(g, uneCouleur);
          }
    }
    Est tu sûr que le code que tu as posté compile ? Parce que à vue de nez, j'ai l'impression qu'il devrait y avoir des erreur de compilation partout.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 99
    Par défaut
    Effectivement j'ai beaucoup d'erreur ...
    Voici la liste je ne les comprend pas en faite ..
    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
    Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
    	at TestMaclasse.paint(TestMaclasse.java:61)
    	at sun.awt.RepaintArea.paintComponent(Unknown Source)
    	at sun.awt.RepaintArea.paint(Unknown Source)
    	at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$000(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-1" java.lang.NullPointerException
    	at TestMaclasse.paint(TestMaclasse.java:61)
    	at sun.awt.RepaintArea.paintComponent(Unknown Source)
    	at sun.awt.RepaintArea.paint(Unknown Source)
    	at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
    	at java.awt.Component.dispatchEventImpl(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(Unknown Source)
    	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    	at java.awt.EventQueue.access$000(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.awt.EventQueue$3.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.awt.EventQueue$4.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    	at java.awt.EventQueue.dispatchEvent(Unknown Source)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    	at java.awt.EventDispatchThread.run(Unknown Source)


    je redonne mes classe
    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
    				/** Un rectangle est caractérise par sa largeur et sa hauteur
                    *   la largeur et la hauteur sont des entiers positifs 
                    *  @author 
                    *  
                    */
    import java.awt.Color;
    import java.awt.Graphics; 		
    public class Maclasse {
    	private int nombre=0;	
    	private double largeur, hauteur ;
    	    private float x ; // abcisse du coté du rectangle
    	    private float y ; // ordonnee du coté du rectangle
    		public Maclasse(){this((float)(Math.random())*500,(float)(Math.random())*500,5,5);}
    	    public Maclasse (float xInit, float yInit, double l, double h){this.largeur=l;this.hauteur=h;this.x=xInit;this.y=yInit; }
    	    /** Obtenir le nombre  de Pierre
                    *   @return le nombre de pierre */
    	  public int getNombre(){return this.nombre;}
    	/** fixer le nombre de Pierre
            *   @param Nombre de Pierre */
    	  public void setNombre(int a){this.nombre=a;}
    	/** Obtenir l'ordonnée  du Rectangle
            *   @return l'ordonnée du coté en haut a gauche */
     
    	    /** Obtenir l'abscisse  du Rectangle
                    *   @return l'abscisse du coté en haut a gauche */
    	  public double getX(){return this.x;}
    	/** fixer l'abscisse  du Rectangle
            *   @param l'abscisse du coté en haut a gauche */
    	  public void setX(float d){this.x=d;}
    	/** Obtenir l'ordonnée  du Rectangle
            *   @return l'ordonnée du coté en haut a gauche */
    	  public double getY(){return this.y;}
    /** fixer l'ordonnée  du Rectangle
    *   @param l'ordonneé du coté en haut a gauche */
    	  public void setY(float a){this.y=a;}
     
    	    /** Obtenir la largeur du Rectangle
                            *   @return la largeur */
    		public double getLargeur(){return this.largeur;}
     
    			/** Obtenir la hauteur du Rectangle
                            *   @return la hauteur */
    		public double getHauteur(){return this.hauteur;}
     
    			/** fixer la largeur du Rectangle
                            *   @param la largeur */
    			public void setLargeur(double l){this.largeur=l;}
     
    			/** fixer la hauteur du Rectangle
                            *   @param la hauteur */
    		public void setHauteur(double h){this.hauteur=h;}
     
    		public double surface(){return this.hauteur*this.largeur;}
     
     
    			/** Dessiner autant de d'objet sur le terrain que voulu */
    		//public void Terrain(Color c,){for(int i=0 ; i<this.nombre ; i++) }
     
    		public void dessiner(Graphics g, Color c){
    	         g.setColor(c);
    	         /*for(int i=0;i<nombre;i++){*/g.drawRect((int)(Math.random()*500), (int)(Math.random()*500), (int)(this.getLargeur()), (int)this.getHauteur());
    	     this.dessiner(g, c);}
    			//} 
    		}
    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
     
    	import java.applet.Applet;
    import java.awt.*;
     
    import java.applet.Applet;
    import java.awt.*;
    import java.awt.event.* ;
    import java.util.ArrayList;
     
    public class TestMaclasse extends Applet implements ActionListener{
      /*private Button reduireAngle = new Button("-") ; 
      private Button deplacer = new Button("GO") ; 
      private Button deplacerVite = new Button("GOO") ; 
      private Button deplacerTresVite = new Button("GOOO") ; 
      private Button augmenterAngle = new Button("+") ;*/ 
      private Button augmenterPierre = new Button("+ Pierre") ;
     // private Button DiminuerPierre = new Button("- Pierre") ;
      private Chenille maChenille  ;
      private Maclasse pierre;
      ArrayList<Maclasse> ListRectangles;
     
       public void init(){
        /*  this.add(reduireAngle);
          this.add(deplacer);
          this.add(deplacerVite);
          this.add(deplacerTresVite);
          this.add(augmenterAngle);*/
          this.add(augmenterPierre);
         // this.add(DiminuerPierre);
          /*reduireAngle.addActionListener(this) ;
          deplacer.addActionListener(this) ;
          deplacerVite.addActionListener(this) ;
          deplacerTresVite.addActionListener(this) ;
          augmenterAngle.addActionListener(this) ;*/
          augmenterPierre.addActionListener(this) ;
          //DiminuerPierre.addActionListener(this) ;
          //maChenille = new Chenille(15,10,45,Color.blue);
          pierre=new Maclasse();
    }
     
     
     
     
       public void actionPerformed(ActionEvent e){
          if/*(e.getActionCommand() == "-") {if (maChenille.getAngleDeVision()>0) {maChenille.setAngleDeVision((maChenille.getAngleDeVision())-5) ; repaint();}}
          else if(e.getActionCommand() == "+") {if (maChenille.getAngleDeVision()<180){maChenille.setAngleDeVision((maChenille.getAngleDeVision())+5) ; repaint();}}
          else if(e.getActionCommand() == "GO") {maChenille.deplacer(); repaint() ;}
          else if(e.getActionCommand() == "GOO") {for(int i=0 ; i<5 ; i++) {maChenille.deplacer(); repaint() ;}}
          else if(e.getActionCommand() == "GOOO") {for(int i=0 ; i<10 ; i++) {maChenille.deplacer(); repaint() ;}}
          else if*/("+ Rectangle".equals(e.getActionCommand())){	    pierre.setX((float)Math.random()*500);  pierre.setY((float)Math.random()*500);
        	    pierre.setHauteur(2);
        	    pierre.setLargeur(2);
        	    ListRectangles= new ArrayList<Maclasse>();
        	    ListRectangles.add( pierre );
        	    repaint();}
       }
     
     
       public void paint(Graphics g) {  
          g.drawRect(5,5,Cercle.xMax-5,Cercle.yMax-5);
          for(Maclasse pierre:ListRectangles) {
              pierre.dessiner(g, Color.darkGray);
         }}}

    tout ce qui est mis en commentaire n'est pas a prendre en compte c'est pour ajouter aux carrés
    Merci de votre aide et la rien ne se passe
    J'ai du mal quand même...

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Ton objet ListRectangles n'est pas instancié, il manque un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new ArrayList<Rectangle>()
    quelque part.


    De plus tu vas avoir une exception du style StackOverflowException avec ce code : tu va boucler sur dessiner à l'infini.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void dessiner(Graphics g, Color c){
    	     g.setColor(c);
    	     this.dessiner(g, c);
    }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/03/2008, 15h13
  2. DTD - probleme pour definir des differentes branches
    Par jeanpol dans le forum Valider
    Réponses: 1
    Dernier message: 11/07/2005, 19h00
  3. Réponses: 7
    Dernier message: 16/04/2005, 08h55
  4. [NetBeans 4.0 Beta 2]Probleme pour monter des jars
    Par nicoo dans le forum NetBeans
    Réponses: 2
    Dernier message: 19/11/2004, 14h14
  5. Réponses: 5
    Dernier message: 07/07/2004, 16h05

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