【问题标题】:Mouse moved event within JPanelJPanel 中的鼠标移动事件
【发布时间】:2011-12-09 07:38:09
【问题描述】:

我在让鼠标事件正常工作时遇到了一些问题。我在 JScrollPane 中的 JLayeredPane 中有一个 JPanel。诚然,我对使用 Swing 还很陌生,但本质上,我希望 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");}

}

任何帮助将不胜感激,在此先感谢!

【问题讨论】:

    标签: java swing mouseevent


    【解决方案1】:

    您是否正在向 MouseListener 注册您的 JPanel 对象? 比如:

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

    或者您可能需要将 MouseListener 添加到 ScrollPane 或 LayeredPane?

    【讨论】:

    • 应该强调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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-22
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多