以下示例打印鼠标行为(输入、按下、释放、单击、退出)发生时的输出。
这也是一种消耗鼠标行为的尝试,这显然是错误的。
当鼠标在框架上单击时,将处理鼠标事件:按下、释放和单击。
由于 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/