java.lang.Object java.util.EventObject java.awt.AWTEvent java.awt.event.ComponentEvent java.awt.event.InputEvent java.awt.event.MouseEvent
public class MouseEvent
指示组件中发生鼠标动作的事件。当且仅当动作发生时鼠标光标处于特定组件边界未被遮掩的部分上,才认为在该组件上发生了鼠标动作。对于轻量级组件,比如 Swing 的组件,当在某个组件上启用某个鼠标事件类型之后,此类鼠标事件仅被指派给该组件。通过将适当的基于鼠标的 EventListener
添加到组件(MouseListener
或 MouseMotionListener
),或者通过调用带有适当掩码参数(AWTEvent.MOUSE_EVENT_MASK
或 AWTEvent.MOUSE_MOTION_EVENT_MASK
)的 Component.enableEvents(long)
,可以启用鼠标事件类型。如果没有对组件启用鼠标事件类型,则相应的鼠标事件将被指派给启用了鼠标事件类型的第一个祖先组件。
例如,如果已经将 MouseListener
添加到某一组件,或者已经调用 enableEvents(AWTEvent.MOUSE_EVENT_MASK)
,则由 MouseListener
定义的所有事件都将指派给该组件。另一方面,如果没有添加 MouseMotionListener
并且没有调用带 AWTEvent.MOUSE_MOTION_EVENT_MASK
参数的 enableEvents
,则鼠标移动事件不会被指派到该组件。这些鼠标移动事件将被指派给启用了鼠标移动事件的第一个祖先组件。
对于以下动作,组件对象将生成此低级别事件:
MouseEvent
对象被传递给每一个 MouseListener
或 MouseAdapter
对象,这些对象使用组件的 addMouseListener
方法注册,以接收“感兴趣的”鼠标事件。(MouseAdapter
对象实现 MouseListener
接口。)每个此类侦听器对象都获得包含鼠标事件的 MouseEvent
。
MouseEvent
对象还传递给每一个 MouseMotionListener
或 MouseMotionAdapter
对象,这些对象使用组件的 addMouseMotionListener
方法注册,以接收鼠标移动事件。(MouseMotionAdapter
对象实现 MouseMotionListener
接口。)每个此类侦听器对象都获得包含鼠标移动事件的 MouseEvent
。
当单击鼠标按键时,将生成事件并发送给已注册的 MouseListener
。可以使用 InputEvent.getModifiers()
和 InputEvent.getModifiersEx()
方法检索模式键的状态。InputEvent.getModifiers()
返回的按键掩码只反映改变了状态的按键,没有反映所有按键的当前状态。(注:由于 ALT_MASK/BUTTON2_MASK 和 META_MASK/BUTTON3_MASK 的值是重叠的,所以对于涉及修改键的鼠标事件并不总是正确的。)要获得所有按键和修改键的状态,请使用 InputEvent.getModifiersEx()
。getButton()
返回改变了状态的鼠标按键。
例如,如果按下了第一个鼠标按键,则以下列顺序发送事件:
id 修饰符 按键按下多个鼠标按键时,每次按下、释放和单击按键都会生成一个独立的事件。MOUSE_PRESSED
:BUTTON1_MASK
BUTTON1
MOUSE_RELEASED
:BUTTON1_MASK
BUTTON1
MOUSE_CLICKED
:BUTTON1_MASK
BUTTON1
例如,如果用户按下按键 1 后按下按键 2,然后以相同的顺序释放它们,则将生成下列事件序列:
id 修饰符 按键如果先释放 按键 2,则先出现MOUSE_PRESSED
:BUTTON1_MASK
BUTTON1
MOUSE_PRESSED
:BUTTON2_MASK
BUTTON2
MOUSE_RELEASED
:BUTTON1_MASK
BUTTON1
MOUSE_CLICKED
:BUTTON1_MASK
BUTTON1
MOUSE_RELEASED
:BUTTON2_MASK
BUTTON2
MOUSE_CLICKED
:BUTTON2_MASK
BUTTON2
BUTTON2_MASK
的
MOUSE_RELEASED
/
MOUSE_CLICKED
对,然后是
BUTTON1_MASK
对。
在释放鼠标按键前,MOUSE_DRAGGED
事件将被传递到鼠标按键按下时所在的 Component
(无论鼠标位置当前是否处于 Component
的边界内)。由于拖放实现与平台有关,所以在本机拖放操作期间可能不传递 MOUSE_DRAGGED
事件。在多屏幕环境中,即使鼠标位置在与 Component
关联的 GraphicsConfiguration
边界之外,也会将鼠标拖动事件传递给该 Component
。但是,在这种情况下报告的鼠标拖动事件位置可能与实际的鼠标位置不同:
Component
关联的 GraphicsConfiguration
边界内。 Component
关联的虚拟设备边界内。
MouseAdapter
,
MouseListener
,
MouseMotionAdapter
,
MouseMotionListener
,
MouseWheelListener
,
Tutorial: Writing a Mouse Listener,
Tutorial: Writing a Mouse Motion Listener,
序列化表格
字段摘要 | |
---|---|
static int |
BUTTON1 指示鼠标按键 #1;由 getButton() 使用。 |
static int |
BUTTON2 指示鼠标按键 #2;由 getButton() 使用。 |
static int |
BUTTON3 指示鼠标按键 #3;由 getButton() 使用。 |
static int |
MOUSE_CLICKED “鼠标单击”事件。 |
static int |
MOUSE_DRAGGED “鼠标拖动”事件。 |
static int |
MOUSE_ENTERED “鼠标进入”事件。 |
static int |
MOUSE_EXITED “鼠标离开”事件。 |
static int |
MOUSE_FIRST 用于鼠标事件的 id 范围的起始编号。 |
static int |
MOUSE_LAST 用于鼠标事件的 id 范围的结束编号。 |
static int |
MOUSE_MOVED “鼠标移动”事件。 |
static int |
MOUSE_PRESSED “鼠标按下”事件。 |
static int |
MOUSE_RELEASED “鼠标释放”事件。 |
static int |
MOUSE_WHEEL “鼠标滚轮”事件。 |
static int |
NOBUTTON 指示没有鼠标按键,由 getButton() 使用。 |
从类 java.awt.event.ComponentEvent 继承的字段 |
---|
COMPONENT_FIRST, COMPONENT_HIDDEN, COMPONENT_LAST, COMPONENT_MOVED, COMPONENT_RESIZED, COMPONENT_SHOWN |
从类 java.util.EventObject 继承的字段 |
---|
source |
构造方法摘要 | |
---|---|
MouseEvent(Component source, int id, long when, int modifiers, int x, int y, int clickCount, boolean popupTrigger) 构造一个具有指定源组件、类型、修饰符、坐标和单击计数的 MouseEvent 对象。 |
|
MouseEvent(Component source, int id, long when, int modifiers, int x, int y, int clickCount, boolean popupTrigger, int button) 构造一个具有指定源组件、类型、修饰符、坐标和单击计数的 MouseEvent 对象。 |
|
MouseEvent(Component source, int id, long when, int modifiers, int x, int y, int xAbs, int yAbs, int clickCount, boolean popupTrigger, int button) 构造一个具有指定源组件、类型、修饰符、相对坐标、绝对坐标和单击计数的 MouseEvent 对象。 |
方法摘要 | |
---|---|
int |
getButton() 返回更改了状态的鼠标按键(如果有)。 |
int |
getClickCount() 返回与此事件关联的鼠标单击次数。 |
Point |
getLocationOnScreen() 返回事件的绝对 x, y 坐标。 |
static String |
getMouseModifiersText(int modifiers) 返回一个描述事件期间所按下的修改键和鼠标按键(如“Shift”或“Ctrl+Shift”)的 String 。 |
Point |
getPoint() 返回事件相对于源组件的 x, y 坐标。 |
int |
getX() 返回事件相对于源组件的水平 x 坐标。 |
int |
getXOnScreen() 返回事件的绝对水平 x 坐标。 |
int |
getY() 返回事件相对于源组件的垂直 y 坐标。 |
int |
getYOnScreen() 返回事件的绝对垂直 y 坐标。 |
boolean |
isPopupTrigger() 返回此鼠标事件是否为该平台的弹出菜单触发事件。 |
String |
paramString() 返回标识此事件的参数字符串。 |
void |
translatePoint(int x, int y) 通过将事件坐标加上指定的 x (水平)和 y (垂直)偏移量,将事件的坐标平移到新位置。 |
从类 java.awt.event.InputEvent 继承的方法 |
---|
consume, getModifiers, getModifiersEx, getModifiersExText, getWhen, isAltDown, isAltGraphDown, isConsumed, isControlDown, isMetaDown, isShiftDown |
从类 java.awt.event.ComponentEvent 继承的方法 |
---|
getComponent |
从类 java.awt.AWTEvent 继承的方法 |
---|
getID, setSource, toString |
从类 java.util.EventObject 继承的方法 |
---|
getSource |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
public static final int MOUSE_FIRST
public static final int MOUSE_LAST
public static final int MOUSE_CLICKED
MouseEvent
。
public static final int MOUSE_PRESSED
MouseEvent
。
public static final int MOUSE_RELEASED
MouseEvent
。
public static final int MOUSE_MOVED
MouseEvent
。
public static final int MOUSE_ENTERED
MouseEvent
。
public static final int MOUSE_EXITED
MouseEvent
。
public static final int MOUSE_DRAGGED
MouseEvent
。
public static final int MOUSE_WHEEL
MouseWheelEvent
。带有滚轮的鼠标在滚轮旋转时产生此事件。
public static final int NOBUTTON
getButton()
使用。
public static final int BUTTON1
getButton()
使用。
public static final int BUTTON2
getButton()
使用。
public static final int BUTTON3
getButton()
使用。
构造方法详细信息 |
---|
public MouseEvent(Component source, int id, long when, int modifiers, int x, int y, int clickCount, boolean popupTrigger, int button)
MouseEvent
对象。
注意,传入无效 id
将导致不确定的行为。创建无效事件(例如使用多个旧的 _MASK,或者使用不匹配的修饰符/按键值)将导致不确定的行为。调用形式为 MouseEvent(source, id, when, modifiers, x, y, clickCount, popupTrigger, button) 的方法与调用 MouseEvent
(source, id, when, modifiers, x, y, xAbs, yAbs, clickCount, popupTrigger, button) 完全相同,其中 xAbs 和 yAbs 定义为屏幕上源组件的位置加上相对坐标 x 和 y。如果没有显示源组件,则 xAbs 和 yAbs 被设置为 0。如果 source
为 null
,则此方法抛出 IllegalArgumentException
。
source
- 产生该事件的
Component
id
- 标识事件的整数
when
- 给出事件发生时间的 long int 值
modifiers
- 事件期间按下的修改键(如 shift、ctrl、alt、meta)。应该使用扩展的 _DOWN_MASK 修饰符或旧的 _MASK 修饰符,但是在一个事件中不应混用两种模型。首选扩展的修饰符。
x
- 鼠标位置的水平 x 坐标
y
- 鼠标位置的垂直 y 坐标
clickCount
- 与事件关联的鼠标单击次数
popupTrigger
- 一个 boolean 值,如果此事件是某个弹出菜单的触发器,则为 true
button
- 改变了状态的鼠标按键。为
NOBUTTON
、
BUTTON1
、
BUTTON2
或
BUTTON3
。
IllegalArgumentException
- 如果传入无效的
button
值
IllegalArgumentException
- 如果
source
为 null
public MouseEvent(Component source, int id, long when, int modifiers, int x, int y, int clickCount, boolean popupTrigger)
MouseEvent
对象。
注意,传入无效 id
将导致不确定的行为。调用形式为 MouseEvent(source, id, when, modifiers, x, y, clickCount, popupTrigger) 的方法所产生的效果与调用 MouseEvent
(source, id, when, modifiers, x, y, xAbs, yAbs, clickCount, popupTrigger, MouseEvent.NOBUTTON) 完全相同,其中 xAbs 和 yAbs 定义为屏幕上原点的位置加上相对坐标 x 和 y。如果没有显示原点,则 xAbs 和 yAbs 被设置为零。如果 source
为 null
,则此方法将抛出 IllegalArgumentException
。
source
- 产生该事件的
Component
id
- 标识事件的整数
when
- 给出事件发生时间的 long int 值
modifiers
- 发生事件期间按下的修改键(例如 shift、ctrl、alt 和 meta),应该使用扩展的 _DOWN_MASK 修饰符或旧的 _MASK 修饰符,但是在一个事件中不应混用两种模型。首选扩展的修饰符。
x
- 鼠标位置的水平 x 坐标
y
- 鼠标位置的垂直 y 坐标
clickCount
- 与该事件有关的鼠标单击次数
popupTrigger
- 一个 boolean 值,如此事件是某个弹出菜单的触发器,则该参数为 true
IllegalArgumentException
- 如果
source
为 null
public MouseEvent(Component source, int id, long when, int modifiers, int x, int y, int xAbs, int yAbs, int clickCount, boolean popupTrigger, int button)
MouseEvent
对象。
注意,传入无效 id
将导致不确定的行为。创建无效事件(比如使用多个旧的 _MASK,或者使用不匹配的修饰符/按钮值)将导致不确定的行为。即使将不一致的相对坐标值和绝对坐标值传递给构造方法,仍然会创建鼠标事件实例,并且不抛出任何异常。如果 source
为 null
,则此方法抛出 IllegalArgumentException
。
source
- 产生该事件的
Component
id
- 标识事件的整数
when
- 给出事件发生时间的 long int 值
modifiers
- 事件期间按下的修改键(如 shift、ctrl、alt、meta)。应该使用扩展的 _DOWN_MASK 修饰符或旧的 _MASK 修饰符,但是在一个事件中不应混用两种模型。首选扩展的修饰符。
x
- 鼠标位置的水平 x 坐标
y
- 鼠标位置的垂直 y 坐标
xAbs
- 鼠标位置的绝对水平 x 坐标
yAbs
- 鼠标位置的绝对垂直 y 坐标
clickCount
- 与事件关联的鼠标单击次数
popupTrigger
- 一个 boolean 值,如果此事件是某个弹出菜单的触发器,则为 true
button
- 更改了状态的鼠标按键。该参数为
NOBUTTON
、
BUTTON1
、
BUTTON2
或
BUTTON3
。
IllegalArgumentException
- 如果传入无效的
button
值
IllegalArgumentException
- 如果
source
为 null
方法详细信息 |
---|
public Point getLocationOnScreen()
Point
对象。
GraphicsConfiguration
public int getXOnScreen()
GraphicsConfiguration
public int getYOnScreen()
GraphicsConfiguration
public int getX()
public int getY()
public Point getPoint()
Point
对象,包含相对于源组件的 x 和 y 坐标
public void translatePoint(int x, int y)
x
(水平)和
y
(垂直)偏移量,将事件的坐标平移到新位置。
x
- 与当前 x 坐标位置相加的水平 x 值
y
- 与当前 y 坐标位置相加的垂直 y 值
public int getClickCount()
public int getButton()
NOBUTTON
、
BUTTON1
、
BUTTON2
或
BUTTON3
。
public boolean isPopupTrigger()
注:在不同系统上弹出菜单的触发方式不同。因此,为了正确实现跨平台功能,在 mouseReleased
和 mousePressed
中都应检查 isPopupTrigger
。
public static String getMouseModifiersText(int modifiers)
String
。通过更改
awt.properties
文件可以本地化这些字符串。
注意,InputEvent.ALT_MASK
和 InputEvent.BUTTON2_MASK
具有相同的值,所以这两个修饰符都返回字符串“Alt”。同样,InputEvent.META_MASK
和 InputEvent.BUTTON3_MASK
具有相同的值,所以这两个修饰符都返回字符串“Meta”。
modifiers
- 描述事件期间所按下的修改键和鼠标按键的修饰符掩码
InputEvent.getModifiersExText(int)
public String paramString()
ComponentEvent
中的
paramString