2011-12-08 21 views
5

Tengo algunos problemas para hacer que funcionen mis eventos de mouse. Tengo un JPanel dentro de un JLayeredPane que está en un JScrollPane. Es cierto que soy bastante nuevo para trabajar con Swing, pero, en esencia, quiero que JPanel reaccione ante el movimiento del mouse, pero no ha podido hacerlo funcionar.Evento de mouse movido dentro de JPanel

public class CellHighlighter extends JPanel implements MouseMotionListener{ 

    public CellHighlighter(){ 

    } 

    public void mouseMoved(MouseEvent evt){ 
     System.out.println(evt.getPoint().x + ", " + evt.getPoint().y); 
    } 

    public void mouseDragged(MouseEvent evt){System.out.println("message");} 

} 

Cualquier ayuda sería muy apreciada, ¡gracias de antemano!

Respuesta

4

¿Está registrando su objeto JPanel con MouseListener? Algo así como:

public CellHighlighter(){ 
     this.addMouseMotionListener(this); 
    } 

O tal vez es necesario agregar la MouseListener a ScrollPane o LayeredPane?

+0

Oh no me había dado cuenta de que, gracias a ti :) –

+0

Cabe destacar que 'addMouseMotionListener' se requiere * * aun cuando la misma instancia tiene ya se agregó a través de 'addMouseListener'. –

2

Aquí hay un código de demostración se puede jugar con:

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionListener; 
import javax.swing.JComponent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class ReactPanel extends JPanel implements MouseMotionListener { 

    public ReactPanel(){ 
     setPreferredSize(new Dimension(450, 450)); 
     setBackground(Color.GREEN); 
     addMouseMotionListener(this); 
    } 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     System.out.println("Mouse dragged (" + e.getX() + ',' + e.getY() + ')'); 
    } 

    @Override 
    public void mouseMoved(MouseEvent e) { 
     System.out.println("Mouse moved (" + e.getX() + ',' + e.getY() + ')'); 

    } 

    public static void main(String[] args){ 
     //Create and set up the window. 
     JFrame frame = new JFrame("MouseMotionEventDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Create and set up the content pane. 
     JComponent newContentPane = new ReactPanel(); 
     newContentPane.setOpaque(true); //content panes must be opaque 
     frame.setContentPane(newContentPane); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
Cuestiones relacionadas