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 :

Tableau de JPanel dans un autre JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Par défaut Tableau de JPanel dans un autre JPanel
    Bonjour et d'avance désolé de poster si mon probleme vient de mon tableau et non de la classe JPanel. J'ai décidé de poster quand meme car ce problème m'ennuit depuis un bon moment et je ne trouve nul part la réponse.

    Voilà je veux insérer un tableau de JPanel dans un autre JPanel afin de réaliser un petit TileMapping (dans l'unique but de m'entrainer afin de mieux comprendre le JAVA).


    Voilà mon code je ne comprend vraiment pas pourquoi il ressort une erreur de type nullpointeurexception à moins que la déclaration de mon tableau ne soit pas bonne dans quel cas les cours que j'ai lut m'aurait mal renseigné car je les ai lus et relus.
    (j'ai essayé la meme chose avec des Layout mais toujours la meme erreur)




    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
     
    public class Window extends JFrame{
     
    protected JPanel contain = new JPanel();
    protected Tile tiletab[] = new Tile[100];
    //Tile est une classe héritée de JPanel
     
         public Window(){
              this.setSize(800,600);
              this.setVisible(true);
              this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              this.setLocationRelativeTo(null);
     
     
                for (i=0 ; i<20 ; i++){
                          contain.add(tileTab[i]);
                 }
         this.setContentPane(contain);
       }
    }

    Merci de vos réponses et vraiment désolé si l'erreur vient du tableau et n'a donc aucun rapport avec swing et awt...

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Bonjour,
    Je vous invite à lire la FAQ sur la question suivant :
    Comment instancier un tableau?
    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Par défaut
    Donc il n'est pas possible de faire cette opération en passant par un tableau , je dois absolument utiliser une collection d'objets? Je ne comprends pas tout mais je vais continuer à lire des cours sur les deux sujets en effet j'avais beau lire et relire mes cours je pense qu'ils n'étaient pas complets à souhaits .

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Par défaut
    en rajoutant une ligne en effet je n'ai plus d'erreur dans de nullpointeurexception je n'avais jamais vu qu'il fallait faire cette opération dans mes cours pour instancier un tableau d'objet je te remercis.Voici mon Code corrigé:

    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
     
    public class Window extends JFrame{
     
    protected JPanel contain = new JPanel();
    protected Tile tiletab[] = new Tile[20];
    //Tile est une classe héritée de JPanel
     
         public Window(){
              this.setSize(800,600);
              this.setVisible(true);
              this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              this.setLocationRelativeTo(null);
               for (i=0 ; i<20 ; i++){
                     tiletab[i] = new Tile();
                 }
     
                for (i=0 ; i<20 ; i++){
                          contain.add(tileTab[i]);
                 }
         this.setContentPane(contain);
       }
    }

  5. #5
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Une seule boucle devrait suffire.
    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
     
    public class Window extends JFrame{
     
    protected JPanel contain = new JPanel();
    protected Tile tiletab[] = new Tile[20];
    //Tile est une classe héritée de JPanel
     
         public Window(){
              this.setSize(800,600);
              this.setVisible(true);
              this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              this.setLocationRelativeTo(null);
               for (i=0 ; i<20 ; i++){
                     tiletab[i] = new Tile();
                     contain.add(tileTab[i]);
                 }
         this.setContentPane(contain);
       }
    }
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Par défaut
    Merci de ton aide mais voilà mon problème concerne désormais bel et bien AWT et SWING je poste le code et je m'explique.
    mon JFrame:
    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
     
    public class Window extends JFrame{
     
    	protected Image imgtest = null;                   //just for test
    	protected int i=0 , j=0;							
    	protected JPanel contain = new JPanel();				//le panel contenant toutes les tiles
    	protected GridLayout gl = new GridLayout(25,50);		// ***certainement la source de mon erreur***
     
    	protected Tile[][] tileTab = new Tile[25][50];				
     
     
    	public Window(){
    		this.setSize(800,600);							// 800 / 16 = 50      600 / 24 = 25
    		this.setVisible(true);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setLocationRelativeTo(null);
     
            contain.setLayout(gl);
    		try {
    			imgtest = ImageIO.read(new File("test.bmp"));
    		} catch (IOException e) {
    			e.printStackTrace();
    		}  										 //mon image fait 16*24 pixels
     
     
    		for (j=0 ; j<50 ; j++){
    		for (i =0 ; i<25 ; i++){
    			tileTab[i][j] = new Tile();
                                          tileTab[i][j].setImg(imgtest);
    			contain.add(tileTab[i][j]);					//(effectivement une seule boucle suffit)
    		    }
    		}
     
     
    		this.setContentPane(contain);
     
     
     
    	}
     
    }


    mon Tile:
    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
     
    public class Tile extends JPanel{
     
    	protected Image img = null;
     
        public Tile(){
        	this.setSize(new Dimension(16,24));
     
        }
     
     
    	public Image getImg() {
    		return img;
    	}
     
    	public void setImg(Image img) {
    		this.img = img;
    	}
     
    	public void paintComponent(Graphics g){
    		g.drawImage(img,0,0,this);
    	}
     
    }


    Voilà rien ne va j'ai beau retourner les nombres dans tous les sens de temps à autre j'ai un affichage et lorsque je charge les images j'ai encore un NullPointeurException...
    (j'ai testé avec un fillrect j'arrive à avoir un affichage mais pas de 25 par 50)
    merci encore pour votre aide future

  7. #7
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Pour le coup, j'ai fait un gros copier/coller ajouter les import et un main pour lancer le tout...
    La seule modification c'est le nom de l'image parce que j'ai pas de .bmp en stock.
    Et ça fonctionne !
    Alors si on peut avoir la trace de l'erreur et sa ligne associé.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah le chemin vers ton image n'est pas correct.

    0ù est placée ton image dans ton projet?

  9. #9
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 209
    Billets dans le blog
    52
    Par défaut
    Si il n'y a pas d'image, c'est l'erreur suivante qui survient :
    javax.imageio.IIOException: Can't read input file!
    Donc ce n'est pas le problème de savoir si l'image est là ou non.

    Sinon, l'image se place à la racine du projet à coté du dossier src.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Par défaut
    Hum je n'ai plus l'erreure inexplicable nullpointeur exception et lorsque je lance ma fenetre s'ouvre vide sans aucune image (mon image est à la source de mon projet).

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Par défaut
    Non je n'ai aucun soucis avec mon image, c'est un des rares sujet que je maitrise seulement ma fenetre s'ouvre toujours vide.
    Nom : test.jpg
Affichages : 895
Taille : 475 octets

  12. #12
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Quelle est la ligne qui déclenche la NullPointerException?

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Par défaut
    Pour en revenir sur ton erreur du tableau, tu avais juste créé un tableau de 100 pointeurs vers des Tile. Mais les pointeurs ne pointaient vers rien avant le tileTab(i)=new Tile();

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Par défaut
    Actuellement j'ai saisi le coup des tableaux et je n'ai plus d'erreur nullpointeurexception mais mes JPanel ne s'affiche toujours pas lorsque la fenetre souvre elle est vide...

  15. #15
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Il faut que tu fasse l'appel au setVisible après avoir ajouté tes composants et non avant (ou alors il faut que tu appelles la méthode revalidate du conteneur)

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Août 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 10
    Par défaut
    Mon code marche enfin et tout celà m'a fait comprendre pas mal de choses sur JAVA donc positif.
    Je vous remercis en espérant ne pas vous avoir fait perdre trop de temps
    hop résolu...

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

Discussions similaires

  1. Afficher deux fois le meme Jpanel dans un autre Jpanel
    Par ryu20 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 06/11/2009, 01h31
  2. JPanel dans un autre JPanel
    Par richard_sraing dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 27/08/2009, 14h12
  3. Réponses: 8
    Dernier message: 30/03/2009, 12h45
  4. Scrollable JPanel dans un autre JPanel
    Par Arcam dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 21/10/2007, 14h54
  5. Donner le focus à un JPanel dans un autre JPanel
    Par Azanael dans le forum Agents de placement/Fenêtres
    Réponses: 17
    Dernier message: 21/06/2005, 23h34

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