eh Andrea, non è semplice.. Cioè, la creazione di una nuova classe che estenda JPanel e che abbia i metodi necessari alla rilevazione del movimento del mouse sarebbe di per sè una cavolata, ma il problema mi sorge proprio per la realizzazione dei metodi!!
Ti posto quello che sono riuscito a fare finora:
Questa è la funzione MouseEntered che rileva il movimento del mouse:
codice:
public void mouseEntered (MouseEvent evt ){
Object source1 = evt.getSource();
Component l = evt.getComponent();
System.out.println ("Ti sei mosso in posizione " + evt.getX() + " : " + evt.getY());
Graphics g = this.getGraphics();
int x = evt.getX();
int y = evt.getY();
int width, height, posizione, cx, cy;
for (int i=0;i<posizioni.size();i++) {
width = images[i].getImage().getWidth(this);
height = images[i].getImage().getHeight(this);
posizione = Integer.parseInt(posizioni.get(i).toString());
cx = Integer.parseInt(xs.get(posizione).toString());
cy = Integer.parseInt(ys.get(posizione).toString());
System.out.println ("Caratteristiche dell'immagine in questione:\nLarghezza: "+width+"\nAltezza: "+height+"\nCoordinata x: "+cx+"\nCoordinata y: "+cy);
if (x>=cx) {
System.out.println ("x maggiore di "+cx);
if (x<(cx+width)) {
System.out.println ("x minore di "+ (cx+width));
//System.out.println ("x minore di "+ (images[i].x+images[i].width));
if (y>=cy) {
System.out.println ("y maggiore di "+ cy);
if (y<=(cy+height)) {
System.out.println ("y minore di "+ (cy+height));
System.out.println ("Evidentemente sei andato sopra la stanza s"+i);
}
else
System.out.println ("y non è minore della coordinata y finale " + (cy+height) + ". Mi fermo!");
}
else
System.out.println ("y non è maggiore della coordinata y iniziale " + cy + ". Mi fermo!");
}
else
System.out.println ("x non è minore della coordinata x finale" + (cx+width) + ". Mi fermo!");
}
else
System.out.println ("x non è maggiore della coordinata x iniziale: " + cx +". Mi fermo!");
Come puoi vedere la serie di if/else serve a rilevare in che posizione il mouse si è spostato. Il problema è che le coordinate che ricevo tramite le funzione evt.getX() e evt.getY() si riferiscono al componente a cui ho agguinto un listener per il mouse e non al pannello totale!!! Ovviamente ho provato ad aggiungere il listener soltato al pannello (e quindi non ai vari componenti), ma non viene come vorrei (infatti alcuni componenti sono in mezzo al pannello e quindi se entro dentro il pannello mi trova la coordinata di "entrata" e non quella dove mi fermo...)..
HELP!!!