This low-level event is generated by a component object for:
A MouseEvent
object is passed to every
MouseListener
or MouseAdapter
object which is registered to receive
the "interesting" mouse events using the component's
addMouseListener
method.
(MouseAdapter
objects implement the
MouseListener
interface.) Each such listener object
gets a MouseEvent
containing the mouse event.
A MouseEvent
object is also passed to every
MouseMotionListener
or
MouseMotionAdapter
object which is registered to receive
mouse motion events using the component's
addMouseMotionListener
method. (MouseMotionAdapter
objects implement the
MouseMotionListener
interface.) Each such listener object
gets a MouseEvent
containing the mouse motion event.
When a mouse button is clicked, events are generated and sent to the
registered MouseListener
s.
The state of modal keys can be retrieved using InputEvent#getModifiers
and InputEvent#getModifiersEx
.
The button mask returned by InputEvent#getModifiers
reflects
only the button that changed state, not the current state of all buttons.
(Note: Due to overlap in the values of ALT_MASK/BUTTON2_MASK and
META_MASK/BUTTON3_MASK, this is not always true for mouse events involving
modifier keys).
To get the state of all buttons and modifier keys, use
InputEvent#getModifiersEx
.
The button which has changed state is returned by MouseEvent#getButton
For example, if the first mouse button is pressed, events are sent in the following order:
id modifiers buttonWhen multiple mouse buttons are pressed, each press, release, and click results in a separate event.MOUSE_PRESSED
:BUTTON1_MASK
BUTTON1
MOUSE_RELEASED
:BUTTON1_MASK
BUTTON1
MOUSE_CLICKED
:BUTTON1_MASK
BUTTON1
For example, if the user presses button 1 followed by button 2, and then releases them in the same order, the following sequence of events is generated:
id modifiers buttonIf button 2 is released first, theMOUSE_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
MOUSE_RELEASED
/MOUSE_CLICKED
pair
for BUTTON2_MASK
arrives first,
followed by the pair for BUTTON1_MASK
.
MOUSE_DRAGGED
events are delivered to the Component
in which the mouse button was pressed until the mouse button is released
(regardless of whether the mouse position is within the bounds of the
Component
). Due to platform-dependent Drag&Drop implementations,
MOUSE_DRAGGED
events may not be delivered during a native
Drag&Drop operation.
In a multi-screen environment mouse drag events are delivered to the
Component
even if the mouse position is outside the bounds of the
GraphicsConfiguration
associated with that
Component
. However, the reported position for mouse drag events
in this case may differ from the actual mouse position:
GraphicsConfiguration
associated with
the Component
.
Component
.
MouseEvent
object with the
specified source component,
type, modifiers, coordinates, and click count.
Note that passing in an invalid id
results in
unspecified behavior. Creating an invalid event (such
as by using more than one of the old _MASKs, or modifier/button
values which don't match) results in unspecified behavior.
This method throws an
IllegalArgumentException
if source
is null
.
MouseEvent
object with the
specified source component,
type, modifiers, coordinates, and click count.
Note that passing in an invalid id
results in
unspecified behavior. This method throws an
IllegalArgumentException
if source
is null
.
MouseEvent
occurs when a mouse button is pressed and released.MouseEvent
occurs when the mouse position changes while a mouse button is pressed.MouseEvent
occurs when the mouse cursor enters the unobscured part of component's
geometry.MouseEvent
occurs when the mouse cursor exits the unobscured part of component's
geometry.MouseEvent
occurs when the mouse position changes.MouseEvent
occurs when a mouse button is pushed down.MouseEvent
occurs when a mouse button is let up.MouseWheelEvent
.
It occurs when a mouse equipped with a wheel has its wheel rotated.
The equals
method implements an equivalence relation
on non-null object references:
x
, x.equals(x)
should return
true
.
x
and y
, x.equals(y)
should return true
if and only if
y.equals(x)
returns true
.
x
, y
, and z
, if
x.equals(y)
returns true
and
y.equals(z)
returns true
, then
x.equals(z)
should return true
.
x
and y
, multiple invocations of
x.equals(y) consistently return true
or consistently return false
, provided no
information used in equals
comparisons on the
objects is modified.
x
,
x.equals(null)
should return false
.
The equals method for class Object
implements
the most discriminating possible equivalence relation on objects;
that is, for any non-null reference values x
and
y
, this method returns true
if and only
if x
and y
refer to the same object
(x == y
has the value true
).
Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.
For example, if the user presses button 1 followed by button 2, and then releases them in the same order, the following sequence of events is generated:
MOUSE_PRESSED
:BUTTON1_DOWN_MASK
MOUSE_PRESSED
:BUTTON1_DOWN_MASK | BUTTON2_DOWN_MASK
MOUSE_RELEASED
:BUTTON2_DOWN_MASK
MOUSE_CLICKED
:BUTTON2_DOWN_MASK
MOUSE_RELEASED
:MOUSE_CLICKED
:
It is not recommended to compare the return value of this method
using ==
because new modifiers can be added in the future.
For example, the appropriate way to check that SHIFT and BUTTON1 are
down, but CTRL is up is demonstrated by the following code:
int onmask = SHIFT_DOWN_MASK | BUTTON1_DOWN_MASK; int offmask = CTRL_DOWN_MASK; if (event.getModifiersEx() & (onmask | offmask) == onmask) { ... }The above code will work even if new modifiers are added.
String
describing the modifier keys and
mouse buttons that were down during the event, such as "Shift",
or "Ctrl+Shift". These strings can be localized by changing
the awt.properties
file.
Note that InputEvent.ALT_MASK
and
InputEvent.BUTTON2_MASK
have the same value,
so the string "Alt" is returned for both modifiers. Likewise,
InputEvent.META_MASK
and
InputEvent.BUTTON3_MASK
have the same value,
so the string "Meta" is returned for both modifiers.
java.util.Hashtable
.
The general contract of hashCode
is:
hashCode
method on each of
the two objects must produce the same integer result.
As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.)
Note: Popup menus are triggered differently
on different systems. Therefore, isPopupTrigger
should be checked in both mousePressed
and mouseReleased
for proper cross-platform functionality.
wait
methods.
The awakened thread will not be able to proceed until the current thread relinquishes the lock on this object. The awakened thread will compete in the usual manner with any other threads that might be actively competing to synchronize on this object; for example, the awakened thread enjoys no reliable privilege or disadvantage in being the next thread to lock this object.
This method should only be called by a thread that is the owner of this object's monitor. A thread becomes the owner of the object's monitor in one of three ways:
synchronized
statement
that synchronizes on the object.
Class,
by executing a
synchronized static method of that class.
Only one thread at a time can own an object's monitor.
wait
methods.
The awakened threads will not be able to proceed until the current thread relinquishes the lock on this object. The awakened threads will compete in the usual manner with any other threads that might be actively competing to synchronize on this object; for example, the awakened threads enjoy no reliable privilege or disadvantage in being the next thread to lock this object.
This method should only be called by a thread that is the owner
of this object's monitor. See the notify
method for a
description of the ways in which a thread can become the owner of
a monitor.
This method is intended to be used only by event targeting subsystems, such as client-defined KeyboardFocusManagers. It is not for general client use.
x
(horizontal) and y
(vertical) offsets.
The current thread must own this object's monitor. The thread
releases ownership of this monitor and waits until another thread
notifies threads waiting on this object's monitor to wake up
either through a call to the notify
method or the
notifyAll
method. The thread then waits until it can
re-obtain ownership of the monitor and resumes execution.
As in the one argument version, interrupts and spurious wakeups are possible, and this method should always be used in a loop:
synchronized (obj) { while (<condition does not hold>) obj.wait(); ... // Perform action appropriate to condition }This method should only be called by a thread that is the owner of this object's monitor. See the
notify
method for a
description of the ways in which a thread can become the owner of
a monitor.The current thread must own this object's monitor.
This method causes the current thread (call it T) to place itself in the wait set for this object and then to relinquish any and all synchronization claims on this object. Thread T becomes disabled for thread scheduling purposes and lies dormant until one of four things happens:
A thread can also wake up without being notified, interrupted, or timing out, a so-called spurious wakeup. While this will rarely occur in practice, applications must guard against it by testing for the condition that should have caused the thread to be awakened, and continuing to wait if the condition is not satisfied. In other words, waits should always occur in loops, like this one:
synchronized (obj) { while (<condition does not hold>) obj.wait(timeout); ... // Perform action appropriate to condition }(For more information on this topic, see Section 3.2.3 in Doug Lea's "Concurrent Programming in Java (Second Edition)" (Addison-Wesley, 2000), or Item 50 in Joshua Bloch's "Effective Java Programming Language Guide" (Addison-Wesley, 2001).
If the current thread is interrupted by another thread while it is waiting, then an InterruptedException is thrown. This exception is not thrown until the lock status of this object has been restored as described above.
Note that the wait method, as it places the current thread into the wait set for this object, unlocks only this object; any other objects on which the current thread may be synchronized remain locked while the thread waits.
This method should only be called by a thread that is the owner
of this object's monitor. See the notify
method for a
description of the ways in which a thread can become the owner of
a monitor.
This method is similar to the wait
method of one
argument, but it allows finer control over the amount of time to
wait for a notification before giving up. The amount of real time,
measured in nanoseconds, is given by:
1000000*timeout+nanos
In all other respects, this method does the same thing as the method of one argument. In particular, wait(0, 0) means the same thing as wait(0).
The current thread must own this object's monitor. The thread releases ownership of this monitor and waits until either of the following two conditions has occurred:
notify
method
or the notifyAll
method.
timeout
milliseconds plus nanos
nanoseconds arguments, has
elapsed.
The thread then waits until it can re-obtain ownership of the monitor and resumes execution.
As in the one argument version, interrupts and spurious wakeups are possible, and this method should always be used in a loop:
synchronized (obj) { while (<condition does not hold>) obj.wait(timeout, nanos); ... // Perform action appropriate to condition }This method should only be called by a thread that is the owner of this object's monitor. See the
notify
method for a
description of the ways in which a thread can become the owner of
a monitor.