2011-12-08 155 views
5

我在使鼠標事件起作用時遇到了一些問題。我在JScrollPane中的JLayeredPane中有一個JPanel。無可否認,我對Swing的工作還很陌生,但本質上,我希望JPanel能夠對鼠標移動做出反應,但一直無法使其工作。鼠標在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");} 

} 

任何幫助將不勝感激,在此先感謝!

回答

4

您是否使用MouseListener註冊您的JPanel對象? 喜歡的東西:

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

或者,也許你需要的的MouseListener添加到滾動或的layeredPane?

+0

哦,我還沒有意識到這一點,謝謝:) –

+0

應當強調的是'addMouseMotionListener'是*必填*即使在相同的實例有已經通過'addMouseListener'添加。 –

2

下面是一些演示代碼,你可以玩:

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); 
    } 
}