Bonjour
J'ai crée une Map composée de 4 couches de 121 JLabel (pour l'instant, c'est ce que j'ai trouve pour gerer les passages de perso devant et derriere des bouts de decors.)
Lorsque je passe la souris sur un de ces JLabel, je voudrais reussir a recuperer le nom de l'image qui est dedans.
A terme, je voudrais reussir a mettre dans une partie de l'ecran des icones 40x40 et en clickant dessus, puis sur un des JLabel de la map afin de donner l'icone a cette derniere, mais surtout pouvoir sauvegarder le nom de l'image qui a ete copié dans une base. Ici pour le 'fond' , il s'agit de 'herbe.png'
Mais la ou je bloque, c'est que je sais le faire quand le JLabel est nommé, mais ici, j'ai la reponse dans le mouseEntered pour la variable niveau : Cannot refer to a non-final variable niveau inside an inner class defined in a different method
meme chose pour x et y
J'attend vos suggestion avec plaisir.
Merci d'avance.
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Map
{
private JLabel[][][] Map = new JLabel[4][11][11];
private String NomImageJLabel;
// plan des objets où le perso passera derrière
private final int devant = 0;
// plan où les personnages se déplaceront ici
private final int milieu = 1;
// plan ou les objets seront posés au sol
// et les persos marcheront dessus
private final int derriere = 2;
// plan ou sera le fond de l'image, herbes, routes, .....
private final int fond = 3;
private final int Originex = 1;
private final int Originey = 1;
private final int Taillex = 40;
private final int Tailley = 40;
private final int xMax = 11;
private final int yMax = 11;
private final int niveauMapMax = 4;
public Map()
{
String image;
for (int niveau = 3; niveau > -1; niveau--)
{
for (int x = 0; x < xMax; x++)
{
for (int y = 0; y < yMax; y++)
{
Map[niveau][x][y] = new JLabel();
Map[niveau][x][y].setBounds(new Rectangle(Originex
+ (x * Taillex), Originey + (y * Tailley), Taillex,
Tailley));
Map[niveau][x][y].setVisible(true);
try
{
if (niveau == fond)
{
image = "herbe.png";
Map[niveau][x][y].setIcon
(new ImageIcon(ImageIO.read(new File("./Images/" + image)),image));
}
else
{
Map[niveau][x][y].setIcon(null);
}
}
catch (IOException e)
{
e.printStackTrace();
}
Map[niveau][x][y].addMouseListener(new java.awt.event.MouseAdapter()
{
public void mouseEntered(java.awt.event.MouseEvent e)
{
if (Map[niveau][x][y].getIcon() != null)
{
NomImageJLabel = Map[niveau][x][y].getIcon().toString();
System.out.println(NomImageJLabel);
}
});
}
}
}
}