/*
* @(#)FocusManager.java 1.28 04/05/18
*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package javax.swing;
import java.awt.*;
/**
* This class has been obsoleted by the 1.4 focus APIs. While client code may
* still use this class, developers are strongly encouraged to use
* java.awt.KeyboardFocusManager
and
* java.awt.DefaultKeyboardFocusManager
instead.
*
* Please see
*
* How to Use the Focus Subsystem,
* a section in The Java Tutorial, and the
* Focus Specification
* for more information.
*
* @see Focus Specification
*
* @version 1.28, 05/18/04
* @author Arnaud Weber
* @author David Mendenhall
*/
public abstract class FocusManager extends DefaultKeyboardFocusManager {
/**
* This field is obsolete, and its use is discouraged since its
* specification is incompatible with the 1.4 focus APIs.
* The current FocusManager is no longer a property of the UI.
* Client code must query for the current FocusManager using
* KeyboardFocusManager.getCurrentKeyboardFocusManager()
.
* See the Focus Specification for more information.
*
* @see java.awt.KeyboardFocusManager#getCurrentKeyboardFocusManager
* @see Focus Specification
*/
public static final String FOCUS_MANAGER_CLASS_PROPERTY =
"FocusManagerClassName";
private static boolean enabled = true;
/**
* Returns the current KeyboardFocusManager
instance
* for the calling thread's context.
*
* @return this thread's context's KeyboardFocusManager
* @see #setCurrentManager
*/
public static FocusManager getCurrentManager() {
KeyboardFocusManager manager =
KeyboardFocusManager.getCurrentKeyboardFocusManager();
if (manager instanceof FocusManager) {
return (FocusManager)manager;
} else {
return new DelegatingDefaultFocusManager(manager);
}
}
/**
* Sets the current KeyboardFocusManager
instance
* for the calling thread's context. If null
is
* specified, then the current KeyboardFocusManager
* is replaced with a new instance of
* DefaultKeyboardFocusManager
.
*
* If a SecurityManager
is installed,
* the calling thread must be granted the AWTPermission
* "replaceKeyboardFocusManager" in order to replace the
* the current KeyboardFocusManager
.
* If this permission is not granted,
* this method will throw a SecurityException
,
* and the current KeyboardFocusManager
will be unchanged.
*
* @param aFocusManager the new KeyboardFocusManager
* for this thread's context
* @see #getCurrentManager
* @see java.awt.DefaultKeyboardFocusManager
* @throws SecurityException if the calling thread does not have permission
* to replace the current KeyboardFocusManager
*/
public static void setCurrentManager(FocusManager aFocusManager)
throws SecurityException
{
// Note: This method is not backward-compatible with 1.3 and earlier
// releases. It now throws a SecurityException in an applet, whereas
// in previous releases, it did not. This issue was discussed at
// length, and ultimately approved by Hans.
KeyboardFocusManager toSet =
(aFocusManager instanceof DelegatingDefaultFocusManager)
? ((DelegatingDefaultFocusManager)aFocusManager).getDelegate()
: aFocusManager;
KeyboardFocusManager.setCurrentKeyboardFocusManager(toSet);
}
/**
* Changes the current KeyboardFocusManager
's default
* FocusTraversalPolicy
to
* DefaultFocusTraversalPolicy
.
*
* @see java.awt.DefaultFocusTraversalPolicy
* @see java.awt.KeyboardFocusManager#setDefaultFocusTraversalPolicy
* @deprecated as of 1.4, replaced by
* KeyboardFocusManager.setDefaultFocusTraversalPolicy(FocusTraversalPolicy)
*/
@Deprecated
public static void disableSwingFocusManager() {
if (enabled) {
enabled = false;
KeyboardFocusManager.getCurrentKeyboardFocusManager().
setDefaultFocusTraversalPolicy(
new DefaultFocusTraversalPolicy());
}
}
/**
* Returns whether the application has invoked
* disableSwingFocusManager()
.
*
* @see #disableSwingFocusManager
* @deprecated As of 1.4, replaced by
* KeyboardFocusManager.getDefaultFocusTraversalPolicy()
*/
@Deprecated
public static boolean isFocusManagerEnabled() {
return enabled;
}
}