java如何知道mousePressed()事件何时发生?
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class AppWindow extends Frame {
String keyMessage = "";
String MouseMsg = "";
int mouseX = 10;
int mouseY = 40;
int locX = 0;
int locY = 0;
public AppWindow() {
addMouseListener(new MyMouseAdaptor(this));
}
public void paint(Graphics g) {
g.drawString(keyMessage, mouseX, mouseY);
g.drawString(MouseMsg, locX, locY);
}
public static void main(String[] args) {
AppWindow appWindow = new AppWindow();
appWindow.setSize(400, 400);
appWindow.setVisible(true);
}
}
class MyMouseAdaptor extends MouseAdapter implements MouseListener {
AppWindow appWindow;
public MyMouseAdaptor(AppWindow appWindow) {
this.appWindow = appWindow;
}
public void mousePressed(MouseEvent e) {
this.appWindow.MouseMsg = "Mouse Pressed at : " + e.getX() + ", "
+ e.getY();
this.appWindow.locX = e.getX();
this.appWindow.locY = e.getY();
this.appWindow.repaint();
}
}
亲爱的大家
我有个奇怪的问题。我知道上面代码中的所有内容,但我遗漏了一些东西。Java如何知道鼠标按下事件发生的时间?我需要为我自己的逻辑找到答案。代码在哪里写的
when the user press the mouse -- > trigger the method "public void mousePressed(MouseEvent e)" and do what is inside it
谢谢
# 1 楼答案
这是注册以查看鼠标事件的代码:
这是扩展
MouseAdaptor
并侦听事件的类:鼠标捕捉器:
用于接收鼠标事件的抽象适配器类。此类中的方法为空。此类的存在是为了方便创建侦听器对象。 鼠标事件允许您跟踪鼠标何时被按下、释放、单击、移动、拖动、何时进入组件、何时退出以及何时移动鼠标滚轮
扩展该类以创建MouseEvent(包括拖动和运动事件)或/和MouseWheelEvent侦听器,并重写感兴趣的事件的方法。(如果您实现MouseListener、MouseMotionListener接口,您必须定义其中的所有方法。这个抽象类为所有方法定义空方法,因此您只能为您关心的事件定义方法。)
使用扩展类创建侦听器对象,然后使用组件的addMouseListener addMouseMotionListener、addMouseWheelListener方法将其注册到组件。在以下情况下,将调用侦听器对象中的相关方法,并将MouseEvent或MouseWheelEvent传递给它:
Link
鼠标听者:
用于接收组件上“有趣”鼠标事件(按下、释放、单击、输入和退出)的侦听器界面。(要跟踪鼠标移动和鼠标拖动,请使用MouseMotionListener。) 对处理鼠标事件感兴趣的类要么实现该接口(及其包含的所有方法),要么扩展抽象的MouseAdapter类(仅覆盖感兴趣的方法)
然后,使用组件的addMouseListener方法向组件注册从该类创建的侦听器对象。鼠标按下、释放或单击(按下并释放)时会生成鼠标事件。当鼠标光标进入或离开组件时,也会生成鼠标事件。当鼠标事件发生时,将调用侦听器对象中的相关方法,并将MouseeEvent传递给它
Link
现在,在您阅读本文之后,我认为您将能够对程序进行一些更改,因为当您实现
MouseListener
接口时,您必须定义其中的所有方法# 2 楼答案
实际上有两个与鼠标相关的事件类:MouseEvent和MouseMotionEvent。还有两个监听器接口,MouseListener和MouseMotionListener。MouseListener接口声明了这些方法
而MouseMotionListener宣称
任何组件都可以生成鼠标事件。想要响应这些事件的对象必须实现一个或两个侦听器接口。它还必须通过调用组件的addMouseListener()和/或addMouseMotionListener()方法向组件注册自身。请注意,实现MouseListener的对象必须为该接口中的所有五个方法提供定义,即使一个定义只是由一组空括号组成。类似地,实现MouseMotionListener的对象必须同时定义mouseMoved()和mouseDragged()方法
当鼠标光标位于组件上时,只要按下鼠标上的一个按钮,组件就会调用mousePressed()。然后,当释放按钮时,它将调用mouseRelease()方法,即使此时光标已移出组件。如果在同一点按下和释放按钮,则调用mouseClicked()方法;除了mousePressed()和mouseReleased()之外,还调用了它。如果只是想响应鼠标点击,可能应该在mousePressed()例程中这样做,并将mouseReleased()和mouseClicked()的定义留空
Source
# 3 楼答案
每个事件都由一个对象表示,该对象提供有关事件的信息并标识事件源。事件源通常是组件或模型,但其他类型的对象也可以是事件源
考虑按钮点击事件为我们进一步观察:
在该语句中,事件被添加到侦听器列表中,当JVM接收到事件(在本例中单击)时,它会对列表中的所有侦听器调用适当的方法
这是怎么发生的?嗯,我认为您应该阅读java中的
Callback
机制您还可以使用回调机制创建自己的侦听器。考虑下面的代码:
代码用于信用卡应用程序模拟。在下面的代码中,调用
pinChanged()
方法时会自动调用changePin()
方法要将回调/侦听器连接到信用卡,只需实现
PinChangeListener
方法:类似地,当您将侦听器连接到按钮时,JVM会检测到单击(您可能不想讨论如何检测单击!)JVM会为您调用所连接的侦听器的
actionPerformed()
。希望一切都会明朗