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

AWT/Swing Java Discussion :

Affichages de plusieurs JButton personnalisés en fonction d'une variable


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Par défaut Affichages de plusieurs JButton personnalisés en fonction d'une variable
    bonjour à tous .
    voilà mon problème .... je dois associer à une valeur de "force d'un personnage", une image , et pour de futurs fonctionnalitées je dois en fait afficher des boutons... pour cela je crée une classe BoutonImage
    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
    public class BoutonImage extends JButton {
    	private String adresseImage;
    	private String name;
    	private Image img;
    	public BoutonImage(String str){
    		super(str);
    		this.adresseImage= str;
    		try {
    		img = ImageIO.read (new File(str));
    		} catch (IOException e) {
    		e.printStackTrace();
    		}
    		}
     
     
    		public void paintComponent(Graphics g){
    		Graphics2D g2d = (Graphics2D)g;
     
    		g2d .drawImage(img, 0, 0, this.getWidth(),
    		this.getHeight(), this);
     
    		}
    				}
    mes valeurs de forces sont compris entre 1 et 6 dans un tableau... valeurs prises aléatoirement bien sur pour compliqué le tout....
    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
    public void affichagemonstre(){
    	int lower = 1; 
    	int higher = 6; 
     
     
    	int nombremonstres = (int)(Math.random() * (higher+1-lower)) + lower;
     
    	int[] force = new int[nombremonstres]; 	System.out.println("il y a "+nombremonstres+"monstres");
     
     
     
    		 for (int i = 0; i < nombremonstres; i++)
    		 {
    		 int max = 0;
    		 do
    		 {
    		 force[ i ] = (int)(Math.random() * (higher+1-lower)) + lower;
    		 max = 0;
    		 for( int n_force = i - 1 ; n_force >= 0 ; --n_force )
    		 {
    		 if( force[ n_force ] == force[ i ] ) { ++max; }
    		 } 
    		 } while( max > i );
    		 System.out.println("monstre n°"+nombremonstres+",force niveau"+force[i]);
    		}
    pour l'instant il n'y a pas de problèmes... donc pour afficher plusieurs BoutonImages en fonctions des valeurs de force[] je définit un tbleau de BoutonImage comme tel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public BoutonImage monster;
     public BoutonImage monster2;
     public BoutonImage monster3;
     public BoutonImage monster4;
     public BoutonImage monster5;
     public BoutonImage monster6;
     public BoutonImage[]monser1={monster,monster2,monster3,monster4,monster5,monster6};
    puis je continue dans la méthode affichagemonstre avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int decal=0;/*mes Bouton sont situés sur une ligne définie par y=115
    ils sont sur une image de plateau donc je dois les décaler d'une valeur x à chaque fois*/
     
    		for(int j=0;j<force.length;j++){	
    			getContentPane().setLayout(null);
    			MonstresImages(force[j],monser1[j]);
     
    		BoutonImage b=monser1[j];
    		b.setBounds (610+decal,115,75,75); 
    		add(b);
    			this.setVisible(true);	
    			decal=decal+75;
     
    		}}
    et voici la méthode MonstresImages:
    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
    public void MonstresImages(int a,BoutonImage b){
    	if (a==1){
     
    		 b=new BoutonImage("troll.gif");
     
     
    					b.setBorder(null);
    					//perso.addActionListener(new Bouton11Listener());
     
    	}
    if (a==3){
     
    	b=new BoutonImage("foret(lv3).gif");
     
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
     
    	}
    if (a==4){
    	getContentPane().setLayout(null);
    	 b=new BoutonImage("foret(lv2).gif");
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
    }
    if (a==5){
    	getContentPane().setLayout(null);
    	 b=new BoutonImage("foret(lv4).gif");
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
     
    }
    if (a==6){
    	getContentPane().setLayout(null);
    	b=new BoutonImage("foret(lv5).gif");
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
     
    }
    if (a==2){
    	getContentPane().setLayout(null);
    	b=new BoutonImage("troll.gif");
     
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
     
    }
    }
    et quand je lance tout ça .... ça me fais plein de jolie lignes d'erreur .... en me surlignant le b.setBounds .... et je ne comprend pas pourquoi, je n'arrive pas non plus à trouver un problème similaire sur internet... pourriez-vous m'éclairer sur le pourquoi du comment ?^^Merci d'avance

  2. #2
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Bonjour maxbond

    ç
    a me fais plein de jolie lignes d'erreur .... en me surlignant le b.setBounds
    Pour t'aider, il serait ben que tu nous dise quelles sont ces erreurs
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Par défaut
    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
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at trucs.Fenetre.affichagemonstre(Fenetre.java:882)
    	at trucs.Fenetre.affichageplateau(Fenetre.java:814)
    	at trucs.Fenetre$Bouton12Listener.actionPerformed(Fenetre.java:1052)
    	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    	at java.awt.Component.processMouseEvent(Unknown Source)
    	at javax.swing.JComponent.processMouseEvent(Unknown Source)
    	at java.awt.Component.processEvent(Unknown Source)
    	at java.awt.Container.processEvent(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.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    	at java.awt.Container.dispatchEventImpl(Unknown Source)
    	at java.awt.Window.dispatchEventImpl(Unknown Source)
    	at java.awt.Component.dispatchEvent(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)
    mais est-ce que cela va vraiment aider sachant que ceci est une petite partie de mon programme ? Bref j'ai recopié ce que la console me marquait....je commence le java donc je ne m'y connait pas très bien et je ne sais pas décoder les erreurs .... donc excusez-moi si les 3 quarts des erreurs ne sont qu'un enchainement logique de causes à effets.

  4. #4
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Oui, cela va t'aider.

    Ton problème se situe en ligne 882 du fichier fenetre.java et est du à un pointeur null

    Regarde donc ce que tu as en Ligne 882, si c'est comme tu le disais
    cela veut dire que b est null.
    A toi de comprendre maintenant pourquoi b vaut null (non initialisé par exemple) .
    Page sur Developpez : http://pbriand.developpez.com

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Par défaut
    ah oui mais... c'est justement ce que je ne comprends pas... je me demande si c'est mon tableau qui est mal définit... parce je me suis dit que si on pouvait faire des tableaux de variables pourquoi pas des tableaux de JButton ? cependant si la méthode est la même que pour int[] je ne vois pas où est l'erreur....
    Ou alors cela vient du fait que j'enregistre certains changement sur un BoutonImage dans une méthode, puis d'autres hors de cette méthode...
    et à vrai dire je ne sais pas du tout du tout....

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Bonjour,

    Comme l'a dit bpy1401, si la ligne de l'erreur (882 du fichier fenetre.java) correspond bien à ton b.setBounds, c'est que b est null.

    Maintenant, il faut trouver pourquoi. D'où vient b ? Apparemment, de là : BoutonImage b=monser1[j];.

    Donc, cela signifie que le j-ième élément de ton tableau est null (a priori, ce n'est pas j qui est trop grand par rapport à la taille du tableau, car sinon, tu aurais eu un IndexOutOfRangeException, et non un NullPointerException). La question est donc, comment sont initialisés les éléments de ton tableau ? A priori, comme ceci : public BoutonImage[]monser1={monster,monster2,monster3,monster4,monster5,monster6};.

    Et donc, d'où viennent ces monsterN ? Ils sont définis aux lignes précédentes, mais ne semblent pas initialisés (pas de monster1 = new BoutonImage("coucou"); par exemple). Donc ils sont nuls, et cela explique ton exception.

    Bref, il te faut initialiser tes BoutonImage.

    Mako.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Par défaut
    effectivement initialiser mes boutons m'enlève les erreur seulement si je les initialise comme tel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public BoutonImage monster=new BoutonImage("troll.gif");
    l'image ne change pas après l'appel de la méthode ... saurais- tu comment régler ce problème ? en fait c'est pourquoi je n'avais pas initialiser mes BoutonImages....

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Par défaut
    j'ai essayé de faire dinitialiser les boutons avec des Strings et dans la méthode changer les valeur du String correspondant... mais ça ne change rien du tout .... bref je déprime...^^ y'a t'il moyen de réinitialiser mes BoutonsImages ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Chef de projet, développeur .net
    Inscrit en
    Juin 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet, développeur .net
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2010
    Messages : 76
    Par défaut
    Salut.

    Quelques petits conseil, quand tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public BoutonImage monster;
    public BoutonImage monster2;
    public BoutonImage monster3;
    public BoutonImage monster4;
    public BoutonImage monster5;
    public BoutonImage monster6;
    public BoutonImage[]monser1={monster,monster2,monster3,monster4,monster5,monster6};
    tes monsterN sont toujours à null et les avoir déclarer avant ne semble pas utile et te créer des variable en plus qui risque de compliquer la compréhension de ton programme, je te conseille donc de remplacer par un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    public BoutonImage[] monser1=new BoutonImage[6];
    Quand tu passe en paramêtre un élément du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonstresImages(force[j],monser1[j]);
    ton but semble d'initialiser ton tableau et non pas de l'utiliser dans la méthode, une méthode renvoyant le BoutonImage serait donc plus approprié et réglera probablement ton probléme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monser1[j] = MonstresImages(force[j]);
    et ta méthode MonstresImages devient donc :

    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
     
    public BoutonImage MonstresImages(int a){
     
     
    	BoutonImage b;
     
    	if (a==1){
     
    		 b=new BoutonImage("troll.gif");
     
     
    					b.setBorder(null);
    					//perso.addActionListener(new Bouton11Listener());
     
    	}
    if (a==3){
     
    	b=new BoutonImage("foret(lv3).gif");
     
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
     
    	}
    if (a==4){
    	getContentPane().setLayout(null);
    	 b=new BoutonImage("foret(lv2).gif");
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
    }
    if (a==5){
    	getContentPane().setLayout(null);
    	 b=new BoutonImage("foret(lv4).gif");
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
     
    }
    if (a==6){
    	getContentPane().setLayout(null);
    	b=new BoutonImage("foret(lv5).gif");
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
     
    }
    if (a==2){
    	getContentPane().setLayout(null);
    	b=new BoutonImage("troll.gif");
     
     
    				b.setBorder(null);
    				//perso.addActionListener(new Bouton11Listener());
     
    }
    return b
    }

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Par défaut
    ohhhhh merci merci infiniment.... c'est tellement beau de voir une méthode qui marche enfin....
    oui en fait j'était en train de transformer ma méthode pour lui renvoyer un bouton image mais je n'avais pas du tout pensé à faire un tableau vide....
    bref merci encore je vais (enfin !)pouvoir avancer dans mon programme^^

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 23
    Par défaut
    ah OUI juste un truc pour bien que le programme fonctionne , il faut dans chaque boucle "if" faire et sinon faire un .... ^^

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/10/2014, 16h18
  2. Réponses: 9
    Dernier message: 23/01/2010, 23h16
  3. [Débutant] Plusieurs fonctions pour une variable
    Par cpt.blake dans le forum MATLAB
    Réponses: 5
    Dernier message: 28/04/2008, 13h07
  4. action vers formaulaire en fonction d'une variable
    Par JauB dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/01/2007, 16h47
  5. [VB6] Image en fonction d'une variable?
    Par TomIG dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/03/2006, 02h22

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