minosubb
Messages postés31Date d'inscriptionjeudi 24 avril 2008StatutMembreDernière intervention24 septembre 2020
-
10 juil. 2008 à 15:06
minosubb
Messages postés31Date d'inscriptionjeudi 24 avril 2008StatutMembreDernière intervention24 septembre 2020
-
16 juil. 2008 à 15:09
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
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);
}
});
}
}
}
}
A voir également:
Utiliser un JLabel Dynamique dans un event du meme JLabel
minosubb
Messages postés31Date d'inscriptionjeudi 24 avril 2008StatutMembreDernière intervention24 septembre 2020 10 juil. 2008 à 17:17
J'ai trouve comment passer les variables au mouseEntered, en les declaration int du for par des private juste apres public class Map {
Mais il y a beau avoir eu un Map[niveau][x][y]].addMouseListener(new java.awt.event.MouseAdapter()
chaque fois que je passe la souris devant le JLabel, niveau = -1 , x=11, y=11, et ce pour tous les JLabel. ce qui entraine que Map[niveau][x][y].getIcon() est hors tableau java.lang.ArrayIndexOutOfBoundsException: -1
Je continu a chercher, mais si vous avez une idée, une remarque, je suis tout ouïe.
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.trackMouseEnterExit(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.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)
Ce qui est 'normal' vue que ca pointe sur des valeurs hors tableau. et j'ai aucune idée du comment faire pour que chaque jLabel ait ses bonnes valeurs de niveau (0-3), x (0-10) et y(0-10)
Si vous pouvez m'aider, je vous en remercie.