首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何消费MouseEvent?

如何消费MouseEvent?
EN

Stack Overflow用户
提问于 2019-10-18 20:09:05
回答 1查看 420关注 0票数 1

下面的示例打印鼠标行为(进入、按下、释放、单击、退出)的输出。

这也是一种使用鼠标行为的尝试,这显然是不正确的。

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

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

即使在其他鼠标调用中,代码也会检查事件是否通过isConsumed()调用使用,但这没有任何影响。

consume()调用的实现有哪些不正确的地方?是否可以简单地处理按下鼠标的呼叫,而不处理任何其他鼠标事件?

代码语言:javascript
复制
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();  
    }  
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-18 20:18:22

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

是否可以简单地处理按下鼠标的呼叫,而不处理其他任何鼠标事件?

是的,当然;)

代码语言:javascript
复制
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();  
    }  
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58450640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档