001: /*
002: * @(#)FocusEvent.java 1.26 06/10/10
003: *
004: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: *
026: */
027:
028: package java.awt.event;
029:
030: import java.awt.Component;
031: import sun.awt.AppContext;
032: import sun.awt.SunToolkit;
033:
034: /**
035: * The component-level focus event.
036: * There are two levels of focus change events: permanent and temporary.
037: * Permanent focus change events occur when focus is directly moved
038: * from one component to another, such as through calls to requestFocus()
039: * or as the user uses the Tab key to traverse components.
040: * Temporary focus change events occur when focus is temporarily
041: * gained or lost for a component as the indirect result of another
042: * operation, such as window deactivation or a scrollbar drag. In this
043: * case, the original focus state will automatically be restored once
044: * that operation is finished, or, for the case of window deactivation,
045: * when the window is reactivated. Both permanent and temporary focus
046: * events are delivered using the FOCUS_GAINED and FOCUS_LOST event ids;
047: * the levels may be distinguished in the event using the isTemporary()
048: * method.
049: *
050: * @version 1.20 08/19/02
051: * @author Carl Quinn
052: * @author Amy Fowler
053: */
054: public class FocusEvent extends ComponentEvent {
055: /**
056: * Marks the first integer id for the range of focus event ids.
057: */
058: public static final int FOCUS_FIRST = 1004;
059: /**
060: * Marks the last integer id for the range of focus event ids.
061: */
062: public static final int FOCUS_LAST = 1005;
063: /**
064: * The focus gained event type.
065: */
066: public static final int FOCUS_GAINED = FOCUS_FIRST; //Event.GOT_FOCUS
067: /**
068: * The focus lost event type.
069: */
070: public static final int FOCUS_LOST = 1 + FOCUS_FIRST; //Event.LOST_FOCUS
071: boolean temporary = false;
072: /*
073: * JDK 1.1 serialVersionUID
074: */
075: private static final long serialVersionUID = 523753786457416396L;
076:
077: transient Component opposite;
078:
079: /**
080: * Constructs a FocusEvent object with the specified source component,
081: * type, and whether or not the focus event is a temporary level event.
082: * @param source the object where the event originated
083: * @id the event type
084: * @temporary whether or not this focus change is temporary
085: */
086: public FocusEvent(Component source, int id, boolean temporary) {
087: super (source, id);
088: this .temporary = temporary;
089: }
090:
091: /**
092: * Constructs a permanent-level FocusEvent object with the
093: * specified source component and type.
094: * @param source the object where the event originated
095: * @id the event type
096: */
097: public FocusEvent(Component source, int id) {
098: this (source, id, false);
099: }
100:
101: public FocusEvent(Component source, int id, boolean temporary,
102: Component opposite) {
103: super (source, id);
104: this .temporary = temporary;
105: this .opposite = opposite;
106: }
107:
108: /**
109: * Returns whether or not this focus change event is a temporary
110: * change.
111: */
112: public boolean isTemporary() {
113: return temporary;
114: }
115:
116: public Component getOppositeComponent() {
117: if (opposite == null) {
118: return null;
119: }
120: return (SunToolkit.targetToAppContext(opposite) == AppContext
121: .getAppContext()) ? opposite : null;
122: }
123:
124: public String paramString() {
125: String typeStr;
126: switch (id) {
127: case FOCUS_GAINED:
128: typeStr = "FOCUS_GAINED";
129: break;
130:
131: case FOCUS_LOST:
132: typeStr = "FOCUS_LOST";
133: break;
134:
135: default:
136: typeStr = "unknown type";
137: }
138: return typeStr + (temporary ? ",temporary" : ",permanent")
139: + ",opposite=" + getOppositeComponent();
140: }
141: }
|