[JAVA] - Tableau de JPanels
Kronos85
-
Kronos85 -
Kronos85 -
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 :
en sachant que j'ai déclaré ceci :
et ma classe Affichage :
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
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 :
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 :
String imgBlank = ".\\Jeux\\mastermind resources\\Blank.png";
Affichage pionsBlank = new Affichage(imgBlank);
JPanel tabPionsEssai[][]={null};
et ma classe Affichage :
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
A voir également:
- [JAVA] - Tableau de JPanels
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
2 réponses
Bonjour,
Avant toute chose je te conseille de réviser tes cours, nul part dans ton code tes variables ne sont initialisées, c'est la cause de ton NullPointerException.
Voilà comment faire :
Je n'ai pas d'éclipse dispo ou je suis donc je n'ai pas testé, mais ca me parait déjà mieux.
Par contre je ne pense pas que ce soit la meilleure des solutions que de faire un tableau de panel.
Je te conseille de passer par un seul panel qui a un gridLayout de taille (maxX;maxY) et d'y insérer les élements au fur à et mesure de ta boucle.
Avant toute chose je te conseille de réviser tes cours, nul part dans ton code tes variables ne sont initialisées, c'est la cause de ton NullPointerException.
Voilà comment faire :
JPanel tabPionsEssai[][]={null};
public void init(){
int posX=-35;
int posY=-35;
int maxX=10;
int maxY=10;
tabPionsEssai = new JPanel[maxX][maxY];
Affichage pionsBlank = null;
for(int j=0; j<10; j++)
{
for(int i=0; i<10; i++)
{
pionsBlank = new Affichage(imgBlank);
pionsBlank.setBounds(posX+35,posY+35,30,30);
tabPionsEssai[i][j] = pionsBlank;
panePrincipal.add(tabPionsEssai[i][j]);
posX=+35;
}
posY=+35;
j=+1;
}
}
Je n'ai pas d'éclipse dispo ou je suis donc je n'ai pas testé, mais ca me parait déjà mieux.
Par contre je ne pense pas que ce soit la meilleure des solutions que de faire un tableau de panel.
Je te conseille de passer par un seul panel qui a un gridLayout de taille (maxX;maxY) et d'y insérer les élements au fur à et mesure de ta boucle.
Merci.
J'ai oublié de le préciser, mais je n'ai posté que des bouts de codes ^^
Rassures-toi mes déclarations étaient bien faites ;)
Ceci dit, entre-temps j'ai pensé à utiliser le GridLayout, ça fonctionne bien mieux et c'est plus simple à utiliser !
Cependant, je crais d'avoir quelques soucis pour localiser mes éléments plus tard quand je voudrais les remplacer...
Enfin je verrais si le problème se pose !
Merci d'avoir pris le temps de répondre ! ;)
J'ai oublié de le préciser, mais je n'ai posté que des bouts de codes ^^
Rassures-toi mes déclarations étaient bien faites ;)
Ceci dit, entre-temps j'ai pensé à utiliser le GridLayout, ça fonctionne bien mieux et c'est plus simple à utiliser !
Cependant, je crais d'avoir quelques soucis pour localiser mes éléments plus tard quand je voudrais les remplacer...
Enfin je verrais si le problème se pose !
Merci d'avoir pris le temps de répondre ! ;)