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 :

[JAVA] - Tableau de JPanels


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Par défaut [JAVA] - Tableau de JPanels
    Bonjour et bonne année à tous

    Je souhaite développer un petit jeu, un mastermind en fait, et je dois donc afficher 10 lignes de 4 pions pour les essais du joueur.

    Mon problème c'est justement de les afficher !
    Je me suis limité pour l'instant à l'affichage des 'trous' vides dans lesquels le joueur placera par la suite ses pions.

    Voici les démarches que j'ai effectués :

    - Affichage dans un JPanel de la même image représentant un trou.
    Problème : Seul la dernière image est affichée.

    - J'ai donc pensé à faire un tableau de JPanels, en fait afficher une seule image dans un seul panel, et crée 10x4 panels...
    Problème : Déjà ça ne fonctionne pas, le code ne contient pas d'erreurs mais me génère une erreur "java.lang.NullPointerException". En plus, cette méthode me semble être assez lourde vu le nombre de panels à créer (surtout qu'il y aura d'autres panels à créer par la suite).

    - Ayant besoin de localiser mes images afin de pouvoir les remplacer par la couleur choisie par le joueur, il faut tout de même que je puisse localiser mes pions. Il faudrait donc un tableau d'images que je collerai sur mon panel.
    Problème : Je ne sais pas trop comment écrire ça, je n'arrive pas à trouver de solution ni sur le net, ni sur la javadoc. J'ai bidouillé un peu dans mon coin mais j'obtiens la même erreur à l'execution du prog : "java.lang.NullPointerException".

    Voici le code de mon initialisation :
    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
    	public void init(){
     
    		int posX=-35;
    		int posY=-35;
     
    		for(int j=0; j<10; j++)
    		{
    			for(int i=0; i<10; i++)
    			{
    				pionsBlank.setBounds(posX+35,posY+35,30,30);
    				tabPionsEssai[i][j].add(pionsBlank);
    				panePrincipal.add(tabPionsEssai[i][j]);
    				posX=+35;
    			}
    			posY=+35;
    			j=+1;
    		}
    	}
    en sachant que j'ai déclaré ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     String imgBlank = ".\\Jeux\\mastermind resources\\Blank.png";
     
     Affichage pionsBlank = new Affichage(imgBlank);
     
     JPanel tabPionsEssai[][]={null};
    et ma classe Affichage :
    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
    public class Affichage extends Canvas{
     
    	private static final long serialVersionUID = 1L;
     
    	Image img;
     
    	public Affichage(String imageLink){
    		img=getToolkit().getImage(imageLink);
    		prepareImage(img,this);
    	}
     
    	public void paint(Graphics g){
    		g.drawImage(img, 0, 0, this);
    	}
     
    }
    Voilà, si quelqu'un avait une idée sur comment palier mon problème.
    Déjà je pense qu'un tableau d'images serait mieux qu'un tableau de JPanel ^_^

    Merci d'avance

  2. #2
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Tu es obligé de passer par des JPanel? Parce que sinon moi je verrai bien de passer par une JTable ou encore une JList...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Par défaut
    Non pas du tout mais disons que pour la présentation des éléments c'est plus sympa.

    Mais je suis en train de tester avec un seul panneau en GridLayout.

    Ce coup-ci ça fonctionne, mais je suis déjà confronté à un nouveau problème :

    Quand je réinitialise (nouveau jeu), les éléments s'ajoutent au précédents au lieu de les remplacer (j'ai pourtant utilisé du pane.remove(Component) avant de faire un nouveau pane.add(Component).

    Exemple :

    | 1 | 2 | 3 | 4 |
    | 1 | 2 | 3 | 4 |
    | 1 | 2 | 3 | 4 |
    ...
    ..
    .

    devient après réinitialisation :

    | 1 1 | 2 2 | 3 3 | 4 4 |
    | 1 1 | 2 2 | 3 3 | 4 4 |
    | 1 1 | 2 2 | 3 3 | 4 4 |
    ...
    ..
    .

    au lieu de redonner le premier schéma...

    Et j'anticipe déjà l'un des prochains problèmes qui sera de repérer la position d'un élément pour le remplacer ! (Je n'ai trouvé nullepart dans la JavaDoc comment obtenir la position d'un éléments dans un panel Grid...) mais bon, un problème à la fois ^_^

  4. #4
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Citation Envoyé par kronos85 Voir le message
    Non pas du tout mais disons que pour la présentation des éléments c'est plus sympa.
    Pourquoi? Ton problème serait rapidement réglé avec une JTable.

    Pour ton problème de layout voici ce que dit la javadoc:
    Note: If a component has been added to a container that has been displayed, validate must be called on that container to display the new component. If multiple components are being added, you can improve efficiency by calling validate only once, after all the components have been added.
    Tu as bien fait un validate?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 51
    Par défaut
    Je n'avais en effet pas pensé à le rajouter, mais de toute façon ça ne change pas le problème, je vois simplement qu'il fait un rafraichissement supplémentaire :s

    [EDIT] Problème de rafraîchissement résolu grâce à la commande removeAll(); dans le panneau approprié

  6. #6
    Membre émérite Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Par défaut
    Montre un le bout de ton code où tu effectues la mise à jour de l'affichage

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

Discussions similaires

  1. Java Desktop Application & JPanel
    Par your@ dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 28/06/2009, 09h55
  2. [java] Tableau (operation sur les tableaux)
    Par Jessika dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 04/01/2007, 13h40
  3. [JAVA] Tableau
    Par torNAdE dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 08/05/2006, 09h53
  4. [Java] Empiler 2 Jpanel au north avec un BorderLayout
    Par lerotou dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 07/02/2006, 19h55
  5. [Débutant] Définir un tableau de JPanel
    Par etiennegaloup dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 20/07/2005, 10h22

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