java - 如何使用MouseEvent?

标签 java mouseevent

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

这也是一种消耗鼠标行为的尝试,这显然是错误的。

当鼠标在框架上单击时,将处理鼠标事件:按下、释放和单击。

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

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

consume() 调用以什么方式被错误地实现?是否可以简单地处理“鼠标按下”调用而不处理任何其他鼠标事件?

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

最佳答案

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

Is it possible to simply process the Mouse Pressed call and none of the other Mouse Events?

是的,当然;)

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

关于java - 如何使用MouseEvent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58450640/

相关文章:

javascript - 将事件监听器附加到整个 html 文档的最佳方式

java - 如何在 hibernate 中配置连接超时?

java - JPA 方法可以延迟加载整个实体图而无需 1+n+n*m 查询?

javascript - Mac 中 Ctrl + 鼠标左键单击(多选)

javascript - Firefox 浏览器中未触发鼠标滚轮事件

d3.js - 将 Vue.js v-on 事件添加到 D3 SVG 元素

Qt:线连接2个单独的图

java - Android:我的加密/解密不起作用,我得到奇怪的输出

java - XML 属性值中无法识别换行符? Java、DOM、JTextArea

java - 获取数组中的一些项目