Java 如何消费MouseEvent?

Java 如何消费MouseEvent?,java,mouseevent,Java,Mouseevent,下面的示例在鼠标行为发生时打印其输出(输入、按下、释放、单击、退出) 这也是一种尝试使用鼠标行为的行为,这显然是错误的 在框架上单击鼠标时,将处理鼠标事件:按下、释放和单击 因为Pressed是第一个被处理的鼠标事件,所以consume()调用被放置在那里,期望鼠标释放和按下的调用不会执行,但没有发生 即使在其他鼠标调用中,代码也会检查事件是否通过isConsumed()调用被使用,但这没有影响 consume()调用以何种方式实现不正确?是否可以简单地处理鼠标按下的调用而不处理任何其他鼠标事件

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

这也是一种尝试使用鼠标行为的行为,这显然是错误的

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

因为Pressed是第一个被处理的鼠标事件,所以consume()调用被放置在那里,期望鼠标释放和按下的调用不会执行,但没有发生

即使在其他鼠标调用中,代码也会检查事件是否通过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
s都是不同的事件。如果您
.consume()
one,这并不意味着也会使用以下事件

是否可以简单地处理鼠标按下的调用而不处理任何其他鼠标事件

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();  
    }  
}
当然可以;)

import java.awt.*;
导入java.awt.event.*;
导入javax.swing.JFrame;
公共类MouseListenerExample扩展JFrame实现MouseListener{
标签l;
MouseListenerExample(){
addMouseListener(这个);
l=新标签();
l、 立根(20,50100,20);
加(l);
设置大小(300300);
setLayout(空);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(真);
}  
公共无效mouseClicked(MouseEvent e){}
公共无效mouseenterned(MouseEvent e){}
公共无效mouseExited(MouseEvent e){}
公共无效MouseEvent e{}
公共无效鼠标按下(MouseEvent e){
System.out.println(“鼠标按下”);
l、 setText(“鼠标按下”);
}  
公共静态void main(字符串[]args){
新的MouseListenerExample();
}  
}

它们是不同的事件,您仅使用“鼠标按下”事件。另请看:谢谢,我读了很多链接,它们几乎都是一样的,只是简单地说它“消耗”了事件,但并没有真正澄清。您提供的一个链接似乎提到,它会使用鼠标事件进入键盘事件,这确实有助于澄清它不适用于其他鼠标事件。谢谢,但我在其他鼠标事件中确实有需要执行的代码,但这一次的情况并非如此。我确实在第一个MouseEvent中设置了一个布尔值,并在随后的鼠标事件中检查了它,以确定是否简单地返回或继续处理。@UnhandledException如果这对您有效,您可以在此处回答您自己的问题-关闭案例,您知道吗?:)