/*
* Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package java.awt.event;
import java.awt.Component;
import sun.awt.AppContext;
import sun.awt.SunToolkit;
A low-level event which indicates that a Component has gained or lost the
input focus. This low-level event is generated by a Component (such as a
TextField). The event is passed to every FocusListener
or
FocusAdapter
object which registered to receive such events
using the Component's addFocusListener
method. (
FocusAdapter
objects implement the FocusListener
interface.) Each such listener object gets this FocusEvent
when
the event occurs.
There are two levels of focus events: permanent and temporary. Permanent
focus change events occur when focus is directly moved from one Component to
another, such as through a call to requestFocus() or as the user uses the
TAB key to traverse Components. Temporary focus change events occur when
focus is temporarily lost for a Component as the indirect result of another
operation, such as Window deactivation or a Scrollbar drag. In this case,
the original focus state will automatically be restored once that operation
is finished, or, for the case of Window deactivation, when the Window is
reactivated. Both permanent and temporary focus events are delivered using
the FOCUS_GAINED and FOCUS_LOST event ids; the level may be distinguished in
the event using the isTemporary() method.
An unspecified behavior will be caused if the id
parameter of any particular FocusEvent
instance is not in the range from FOCUS_FIRST
to FOCUS_LAST
.
Author: Carl Quinn, Amy Fowler See Also: Since: 1.1
/**
* A low-level event which indicates that a Component has gained or lost the
* input focus. This low-level event is generated by a Component (such as a
* TextField). The event is passed to every <code>FocusListener</code> or
* <code>FocusAdapter</code> object which registered to receive such events
* using the Component's <code>addFocusListener</code> method. (<code>
* FocusAdapter</code> objects implement the <code>FocusListener</code>
* interface.) Each such listener object gets this <code>FocusEvent</code> when
* the event occurs.
* <p>
* There are two levels of focus events: permanent and temporary. Permanent
* focus change events occur when focus is directly moved from one Component to
* another, such as through a call to requestFocus() or as the user uses the
* TAB key to traverse Components. Temporary focus change events occur when
* focus is temporarily lost for a Component as the indirect result of another
* operation, such as Window deactivation or a Scrollbar drag. In this case,
* the original focus state will automatically be restored once that operation
* is finished, or, for the case of Window deactivation, when the Window is
* reactivated. Both permanent and temporary focus events are delivered using
* the FOCUS_GAINED and FOCUS_LOST event ids; the level may be distinguished in
* the event using the isTemporary() method.
* <p>
* An unspecified behavior will be caused if the {@code id} parameter
* of any particular {@code FocusEvent} instance is not
* in the range from {@code FOCUS_FIRST} to {@code FOCUS_LAST}.
*
* @see FocusAdapter
* @see FocusListener
* @see <a href="https://docs.oracle.com/javase/tutorial/uiswing/events/focuslistener.html">Tutorial: Writing a Focus Listener</a>
*
* @author Carl Quinn
* @author Amy Fowler
* @since 1.1
*/
public class FocusEvent extends ComponentEvent {
The first number in the range of ids used for focus events.
/**
* The first number in the range of ids used for focus events.
*/
public static final int FOCUS_FIRST = 1004;
The last number in the range of ids used for focus events.
/**
* The last number in the range of ids used for focus events.
*/
public static final int FOCUS_LAST = 1005;
This event indicates that the Component is now the focus owner.
/**
* This event indicates that the Component is now the focus owner.
*/
public static final int FOCUS_GAINED = FOCUS_FIRST; //Event.GOT_FOCUS
This event indicates that the Component is no longer the focus owner.
/**
* This event indicates that the Component is no longer the focus owner.
*/
public static final int FOCUS_LOST = 1 + FOCUS_FIRST; //Event.LOST_FOCUS
A focus event can have two different levels, permanent and temporary.
It will be set to true if some operation takes away the focus
temporarily and intends on getting it back once the event is completed.
Otherwise it will be set to false.
See Also: @serial
/**
* A focus event can have two different levels, permanent and temporary.
* It will be set to true if some operation takes away the focus
* temporarily and intends on getting it back once the event is completed.
* Otherwise it will be set to false.
*
* @serial
* @see #isTemporary
*/
boolean temporary;
The other Component involved in this focus change. For a FOCUS_GAINED
event, this is the Component that lost focus. For a FOCUS_LOST event,
this is the Component that gained focus. If this focus change occurs
with a native application, a Java application in a different VM, or with
no other Component, then the opposite Component is null.
See Also: - getOppositeComponent
Since: 1.4
/**
* The other Component involved in this focus change. For a FOCUS_GAINED
* event, this is the Component that lost focus. For a FOCUS_LOST event,
* this is the Component that gained focus. If this focus change occurs
* with a native application, a Java application in a different VM, or with
* no other Component, then the opposite Component is null.
*
* @see #getOppositeComponent
* @since 1.4
*/
transient Component opposite;
/*
* JDK 1.1 serialVersionUID
*/
private static final long serialVersionUID = 523753786457416396L;
Constructs a FocusEvent
object with the
specified temporary state and opposite Component
.
The opposite Component
is the other
Component
involved in this focus change.
For a FOCUS_GAINED
event, this is the
Component
that lost focus. For a
FOCUS_LOST
event, this is the Component
that gained focus. If this focus change occurs with a native
application, with a Java application in a different VM,
or with no other Component
, then the opposite
Component
is null
.
This method throws an
IllegalArgumentException
if source
is null
.
Params: - source – The
Component
that originated the event - id – An integer indicating the type of event. For information on allowable values, see the class description for
FocusEvent
- temporary – Equals
true
if the focus change is temporary;
false
otherwise - opposite – The other Component involved in the focus change,
or
null
Throws: - IllegalArgumentException – if
source
equals null
See Also: Since: 1.4
/**
* Constructs a <code>FocusEvent</code> object with the
* specified temporary state and opposite <code>Component</code>.
* The opposite <code>Component</code> is the other
* <code>Component</code> involved in this focus change.
* For a <code>FOCUS_GAINED</code> event, this is the
* <code>Component</code> that lost focus. For a
* <code>FOCUS_LOST</code> event, this is the <code>Component</code>
* that gained focus. If this focus change occurs with a native
* application, with a Java application in a different VM,
* or with no other <code>Component</code>, then the opposite
* <code>Component</code> is <code>null</code>.
* <p> This method throws an
* <code>IllegalArgumentException</code> if <code>source</code>
* is <code>null</code>.
*
* @param source The <code>Component</code> that originated the event
* @param id An integer indicating the type of event.
* For information on allowable values, see
* the class description for {@link FocusEvent}
* @param temporary Equals <code>true</code> if the focus change is temporary;
* <code>false</code> otherwise
* @param opposite The other Component involved in the focus change,
* or <code>null</code>
* @throws IllegalArgumentException if <code>source</code> equals {@code null}
* @see #getSource()
* @see #getID()
* @see #isTemporary()
* @see #getOppositeComponent()
* @since 1.4
*/
public FocusEvent(Component source, int id, boolean temporary,
Component opposite) {
super(source, id);
this.temporary = temporary;
this.opposite = opposite;
}
Constructs a FocusEvent
object and identifies
whether or not the change is temporary.
This method throws an
IllegalArgumentException
if source
is null
.
Params: - source – The
Component
that originated the event - id – An integer indicating the type of event. For information on allowable values, see the class description for
FocusEvent
- temporary – Equals
true
if the focus change is temporary;
false
otherwise
Throws: - IllegalArgumentException – if
source
equals null
See Also:
/**
* Constructs a <code>FocusEvent</code> object and identifies
* whether or not the change is temporary.
* <p> This method throws an
* <code>IllegalArgumentException</code> if <code>source</code>
* is <code>null</code>.
*
* @param source The <code>Component</code> that originated the event
* @param id An integer indicating the type of event.
* For information on allowable values, see
* the class description for {@link FocusEvent}
* @param temporary Equals <code>true</code> if the focus change is temporary;
* <code>false</code> otherwise
* @throws IllegalArgumentException if <code>source</code> equals {@code null}
* @see #getSource()
* @see #getID()
* @see #isTemporary()
*/
public FocusEvent(Component source, int id, boolean temporary) {
this(source, id, temporary, null);
}
Constructs a FocusEvent
object and identifies it
as a permanent change in focus.
This method throws an
IllegalArgumentException
if source
is null
.
Params: - source – The
Component
that originated the event - id – An integer indicating the type of event. For information on allowable values, see the class description for
FocusEvent
Throws: - IllegalArgumentException – if
source
equals null
See Also:
/**
* Constructs a <code>FocusEvent</code> object and identifies it
* as a permanent change in focus.
* <p> This method throws an
* <code>IllegalArgumentException</code> if <code>source</code>
* is <code>null</code>.
*
* @param source The <code>Component</code> that originated the event
* @param id An integer indicating the type of event.
* For information on allowable values, see
* the class description for {@link FocusEvent}
* @throws IllegalArgumentException if <code>source</code> equals {@code null}
* @see #getSource()
* @see #getID()
*/
public FocusEvent(Component source, int id) {
this(source, id, false);
}
Identifies the focus change event as temporary or permanent.
Returns: true
if the focus change is temporary;
false
otherwise
/**
* Identifies the focus change event as temporary or permanent.
*
* @return <code>true</code> if the focus change is temporary;
* <code>false</code> otherwise
*/
public boolean isTemporary() {
return temporary;
}
Returns the other Component involved in this focus change. For a
FOCUS_GAINED event, this is the Component that lost focus. For a
FOCUS_LOST event, this is the Component that gained focus. If this
focus change occurs with a native application, with a Java application
in a different VM or context, or with no other Component, then null is
returned.
Returns: the other Component involved in the focus change, or null Since: 1.4
/**
* Returns the other Component involved in this focus change. For a
* FOCUS_GAINED event, this is the Component that lost focus. For a
* FOCUS_LOST event, this is the Component that gained focus. If this
* focus change occurs with a native application, with a Java application
* in a different VM or context, or with no other Component, then null is
* returned.
*
* @return the other Component involved in the focus change, or null
* @since 1.4
*/
public Component getOppositeComponent() {
if (opposite == null) {
return null;
}
return (SunToolkit.targetToAppContext(opposite) ==
AppContext.getAppContext())
? opposite
: null;
}
Returns a parameter string identifying this event.
This method is useful for event-logging and for debugging.
Returns: a string identifying the event and its attributes
/**
* Returns a parameter string identifying this event.
* This method is useful for event-logging and for debugging.
*
* @return a string identifying the event and its attributes
*/
public String paramString() {
String typeStr;
switch(id) {
case FOCUS_GAINED:
typeStr = "FOCUS_GAINED";
break;
case FOCUS_LOST:
typeStr = "FOCUS_LOST";
break;
default:
typeStr = "unknown type";
}
return typeStr + (temporary ? ",temporary" : ",permanent") +
",opposite=" + getOppositeComponent();
}
}