首页 > 解决方案 > 如何使用 MouseEvent?

问题描述

以下示例在发生时打印鼠标行为(输入、按下、释放、单击、退出)的输出。

这也是一种尝试消耗显然不正确的鼠标行为。

当在 Frame 上单击鼠标时,将处理鼠标事件:Pressed、Release 和 Clicked。

由于 Pressed 是第一个正在处理的鼠标事件,因此将 consume() 调用放置在那里,期望 Mouse Released 和 Pressed 调用不会执行,但这并没有发生。

即使在其他 Mouse 调用中,代码也会检查是否通过 isConsumed() 调用消耗了事件,但这没有影响。

消费()调用以什么方式执行不正确?是否可以简单地处理 Mouse Pressed 调用而不处理其他鼠标事件?

import java.awt.*;  
import java.awt.event.*;  

import javax.swing.JFrame;

public class MouseListenerExample extends JFrame implements MouseListener
{  
    Label l;  
    MouseListenerExample()
    {  
        addMouseListener(this);  

        l=new Label();  
        l.setBounds(20,50,100,20);  
        add(l);  
        setSize(300,300);  
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);  
    }  
    public void mouseClicked(MouseEvent e)    
    {
        if (e.isConsumed())
            return;

        System.out.println("Mouse Clicked");
        l.setText("Mouse Clicked");  
    }  
    public void mouseEntered(MouseEvent e) 
    {  
        System.out.println("Mouse Entered");
        l.setText("Mouse Entered");  
    }  
    public void mouseExited(MouseEvent e) 
    {  
        System.out.println("Mouse Exited");
        l.setText("Mouse Exited");  
    }  
    public void mousePressed(MouseEvent e) 
    {  
        System.out.println("Mouse Pressed");
        e.consume();
        System.out.println("Mouse Pressed - After consume()");
        l.setText("Mouse Pressed");  
    }  
    public void mouseReleased(MouseEvent e) 
    {  
        if (e.isConsumed())
            return;
        System.out.println("Mouse Released");
        l.setText("Mouse Released");  
    }

    public static void main(String[] args) {  
        new MouseListenerExample();  
    }  
}

标签: javamouseevent

解决方案


正如@Arnoud在评论中所说:这些MouseEvent都是不同的事件。如果.consume()是你,这并不意味着以下事件也会被消耗。

是否可以简单地处理 Mouse Pressed 调用而不处理其他鼠标事件?

是的当然 ;)

import java.awt.*;  
import java.awt.event.*;  

import javax.swing.JFrame;

public class MouseListenerExample extends JFrame implements MouseListener {  

    Label l;  

    MouseListenerExample() {  
        addMouseListener(this);  
        l=new Label();  
        l.setBounds(20,50,100,20);  
        add(l);  
        setSize(300,300);  
        setLayout(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);  
    }  

    public void mouseClicked(MouseEvent e){}  
    public void mouseEntered(MouseEvent e){}  
    public void mouseExited(MouseEvent e){}  
    public void mouseReleased(MouseEvent e){}

    public void mousePressed(MouseEvent e) {  
        System.out.println("Mouse Pressed");
        l.setText("Mouse Pressed");  
    }  

    public static void main(String[] args) {  
        new MouseListenerExample();  
    }  
}

推荐阅读