2011-12-08 45 views
5

Tôi đang gặp phải một số sự cố khi khiến sự kiện chuột của tôi hoạt động. Tôi có một JPanel bên trong một JLayeredPane mà là trong một JScrollPane. Phải thừa nhận rằng, tôi khá mới để làm việc với Swing, nhưng về cơ bản, tôi muốn JPanel phản ứng với việc di chuyển chuột, nhưng không thể làm cho nó hoạt động được.Sự kiện di chuyển chuột trong 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");} 

} 

Mọi trợ giúp sẽ được đánh giá cao, cảm ơn trước!

Trả lời

4

Bạn đang đăng ký đối tượng JPanel của mình với Trình ghi chuột? Một cái gì đó như:

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

Hoặc có thể bạn cần phải thêm trình xử lý chuột vào ScrollPane hoặc LayeredPane?

+0

Oh tôi đã không nhận ra rằng, cảm ơn bạn :) –

+0

Cần nhấn mạnh rằng 'addMouseMotionListener' được * cần * ngay cả khi cùng một ví dụ có đã được thêm vào thông qua 'addMouseListener'. –

2

Dưới đây là một số mã demo bạn có thể chơi với:

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); 
    } 
} 
Các vấn đề liên quan