PDA

View Full Version : [java] problemuccio MouseListener


Don[ITA]
24-02-2008, 23:54
Salve a tutti bella gente!!! Oggi mi sono messo in mente di fare un programmino stupidello per rappresentare (in qualche modo) un grafo (precisamente un grafo non orientato) e mi sono subito inbattuto in un problemuccio...
Ho creato un JPanel sul quale posso disegnare i nodi, che per semplicità rappresento come cerchiolini di colore ciano e bordo nero. Qui sotto riporto il codice che uso per disegnare i nodi sul pannello:
private class NodoGrafico extends JComponent{

private Coord coord;
private int x, y;
private Color bg = Color.CYAN;
private Color fg = Color.BLACK;

public NodoGrafico(Coord c){
super();
coord = c;
highlight();
}

public NodoGrafico(int x, int y){
super();
this.x = x;
this.y = y;
highlight();
}

/**
* I listener non vanno!!!!!!
*/
private void highlight(){
System.out.println("Ho addato i listener");
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e){
System.out.println("Sei nel nodo");
bg = Color.MAGENTA;
}

@Override
public void mouseExited(MouseEvent e){
System.out.println("Uscito dal nodo");
bg = Color.CYAN;
}
});
}

@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D nodo = (Graphics2D)g;
nodo.setColor(bg);
nodo.fillOval(x, y, 9, 9);
nodo.setColor(fg);
nodo.drawOval(x, y, 9, 9);
}

public Coord getCoord(){
return coord;
}

}

In parole povere questa classe NodoGrafico altro non è che un JComponent che disegna appunto il cerchietto.
Ora...io vorrei che al passaggio del mouse sopra questo cerchietto esso cambi colore in modo che si "evidenzi". Per far ciò ho usato il MouseListener ma...sorpresa sorpresa...il pallino non cambia!!!! Sembra che il mouse non ci passi mai sopra....:muro: :muro:

Avete idee del perchè succeda una cosa del genere???
Saluti :help:

banryu79
25-02-2008, 12:15
Avete idee del perchè succeda una cosa del genere???

Forse perchè hai scordato di dichiarare che la tua classe implementa l'interfaccia MouseListener?

private class NodoGrafico extends JComponent implements MouseListener {...}

Inoltre nel codice dei metodi mouseEntered() & mouseExited() dopo aver settato il colore dovresti invocare un bel repaint() [che provoca una chiamata a paintComponent()].

Ciao :)

P.S.: se ti interessano i dettagli vedi -> qui (http://www.leepoint.net/notes-java/GUI-lowlevel/graphics/15who-calls-paintcomponent.html)

Don[ITA]
25-02-2008, 13:39
addMouseListener(new MouseAdapter() {
@Override
public void mouseEntered(MouseEvent e){
System.out.println("Sei nel nodo");
bg = Color.MAGENTA;
}

@Override
public void mouseExited(MouseEvent e){
System.out.println("Uscito dal nodo");
bg = Color.CYAN;
}
});
In teoria usando questo tipo di dichiarazione non serve implementare l'interfaccia MouseListener...implementando quell'interfaccia avrei dovuto aggiungere pure gli altri metodi tipo mousePressed o mouseReleased che a me non servono...Cmq avevo gia fatto questa prova e non accadeva nulla comunque...sembra che i metodi mouseEntered e mouseExited non vengano mai chiamati in quanto non mi stampa da nessuna parte "Sei nel nodo" o "Uscito dal nodo"...