java - 如何使用 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();
}
}
解决方案
正如@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();
}
}
推荐阅读
- react-native - react native如何在材质日期选择器中实现材质文本输入?
- dns - CNAME 记录是否公开
- ruby-on-rails - 收听另一个 rails actioncable 服务器
- c++ - C++ 方法中的静态变量
- laravel - 在 Laravel 中从模型中添加多个 Where 子句
- lstm - RuntimeError: Expected hidden[0] size (2, 20, 256), got (2, 50, 256)
- java - 删除所有不起作用的java换行符(如emacs所示)
- c - 以下代码如何出现堆栈粉碎错误?
- gem5 - gem5 X86 完整系统模式运行失败:“在路径上找不到文件 'x86root.img'”
- javascript - 以适当的方式解构