如何同时听鼠标移动和左键

Posted

技术标签:

【中文标题】如何同时听鼠标移动和左键【英文标题】:How to listen to mouse movements and left button at the same time 【发布时间】:2014-04-09 17:40:08 【问题描述】:

我想要的是:当鼠标移动到单元格(JPanels)上并单击左键(在移动鼠标时按住),单元格应该改变状态。正是您在画布上使用鼠标绘图时所期望的。我就是这样做的:

this.addMouseMotionListener(new MouseAdapter() 
            @Override
            public void mouseEntered(MouseEvent arg0) 
                if(SwingUtilities.isLeftMouseButton(arg0)) 
                    setItem(MapItems._W_);
                 else 
                    setItem(MapItems.___);
                
                DrawableCell.this.repaint();
            
        );

这不起作用(没有任何反应)。使用 mouseMoved() 并没有什么不同。

唯一能做任何事情的是:

public void mouseMoved(MouseEvent arg0) 
    if(arg0.isControlDown()) 
        setItem(MapItems._W_);
     else 
        setItem(MapItems.___);
    
    DrawableCell.this.repaint();

);

问题在于,由于 mouseMoved 多次触发,因此单元格的状态正在迅速变化,结果是随机的。

怎么做?

【问题讨论】:

【参考方案1】:

您必须改用mouseListener。请参阅 oracle 文档以获取帮助。

【讨论】:

@jackthehipster 欢迎您 :)。 也许将您的答案作为代码发布?一开始我很困惑,因为我以为你的意思是(new MouseListener()),但是 this.addMouseListener 是需要的……也许其他人偶然发现了这个【参考方案2】:

好吧.. 可能在这里你可以找到一些解脱。 举个例子。。 或者你可以去source解决方案寻求更多帮助

public static void main ( String[] args )

    JFrame paint = new JFrame ();

    paint.add ( new JComponent ()
    
        private List<Shape> shapes = new ArrayList<Shape> ();
        private Shape currentShape = null;

        
        MouseAdapter mouseAdapter = new MouseAdapter ()
        
            public void mousePressed ( MouseEvent e )
            
            currentShape = new Line2D.Double ( e.getPoint (), e.getPoint () );
            shapes.add ( currentShape );
            repaint ();
            

            public void mouseDragged ( MouseEvent e )
            
            Line2D shape = ( Line2D ) currentShape;
            shape.setLine ( shape.getP1 (), e.getPoint () );
            repaint ();
            

            public void mouseReleased ( MouseEvent e )
            
            currentShape = null;
            repaint ();
            
        ;
        addMouseListener ( mouseAdapter );
        addMouseMotionListener ( mouseAdapter );
        

        protected void paintComponent ( Graphics g )
        
        Graphics2D g2d = ( Graphics2D ) g;
        g2d.setPaint ( Color.BLACK );
        for ( Shape shape : shapes )
        
            g2d.draw ( shape );
        
        
     );

    paint.setSize ( 500, 500 );
    paint.setLocationRelativeTo ( null );
    paint.setVisible ( true );

【讨论】:

以上是关于如何同时听鼠标移动和左键的主要内容,如果未能解决你的问题,请参考以下文章

Autohotkey 同时多个热键(中键、左键、鼠标右键同时按下)

笔记本电脑触控板操作小结

笔记本电脑触控板操作小结

intellij 怎么把提示的话复制下来

案例:简易的Div拖拽

visio怎么移动图形不是画布