📄 component.java
字号:
/*
* @(#)Component.java 1.182 98/08/27
*
* Copyright 1995-1998 by Sun Microsystems, Inc.,
* 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
* All rights reserved.
*
* This software is the confidential and proprietary information
* of Sun Microsystems, Inc. ("Confidential Information"). You
* shall not disclose such Confidential Information and shall use
* it only in accordance with the terms of the license agreement
* you entered into with Sun.
*/
package java.awt;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.Vector;
import java.util.Locale;
import java.awt.peer.ComponentPeer;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.image.ColorModel;
import java.awt.event.*;
import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
import sun.awt.im.InputContext;
/**
* A <em>component</em> is an object having a graphical representation
* that can be displayed on the screen and that can interact with the
* user. Examples of components are the buttons, checkboxes, and scrollbars
* of a typical graphical user interface. <p>
* The <code>Component</code> class is the abstract superclass of
* the nonmenu-related Abstract Window Toolkit components. Class
* <code>Component</code> can also be extended directly to create a
* lightweight component. A lightweight component is a component that is
* not associated with a native opaque window.
*
* @version 1.182, 08/27/98
* @author Arthur van Hoff
* @author Sami Shaio
*/
public abstract class Component implements ImageObserver, MenuContainer,
Serializable
{
/**
* The peer of the component. The peer implements the component's
* behaviour. The peer is set when the Component is added to a
* container that also is a peer.
* @see #addNotify
* @see #removeNotify
*/
transient ComponentPeer peer;
/**
* The parent of the object. It may be null for top-level components.
* @see #getParent
*/
transient Container parent;
/**
* The x position of the component in the parent's coordinate system.
* @see #getLocation
*/
int x;
/**
* The y position of the component in the parent's coordinate system.
* @see #getLocation
*/
int y;
/**
* The width of the component.
* @see #getSize
*/
int width;
/**
* The height of the component.
* @see #getSize
*/
int height;
/**
* The foreground color for this component.
* @see #getForeground
* @see #setForeground
*/
Color foreground;
/**
* The background color for this component.
* @see #getBackground
* @see #setBackground
*/
Color background;
/**
* The font used by this component.
* @see #getFont
* @see #setFont
*/
Font font;
/**
* The cursor displayed when pointer is over this component.
* @see #getCursor
* @see #setCursor
*/
Cursor cursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
/**
* The locale for the component.
* @see #getLocale
* @see #setLocale
*/
Locale locale;
/**
* True when the object is visible. An object that is not
* visible is not drawn on the screen.
* @see #isVisible
* @see #setVisible
*/
boolean visible = true;
/**
* True when the object is enabled. An object that is not
* enabled does not interact with the user.
* @see #isEnabled
* @see #setEnabled
*/
boolean enabled = true;
/**
* True when the object is valid. An invalid object needs to
* be layed out. This flag is set to false when the object
* size is changed.
* @see #isValid
* @see #validate
* @see #invalidate
*/
boolean valid = false;
Vector popups;
private String name;
private boolean nameExplicitlySet = false;
/**
* The locking object for AWT component-tree and layout operations.
*
* @see #getTreeLock
*/
static final Object LOCK = new Object();
/** Internal, cached size information */
Dimension minSize;
/** Internal, cached size information */
Dimension prefSize;
boolean newEventsOnly = false;
transient ComponentListener componentListener;
transient FocusListener focusListener;
transient KeyListener keyListener;
transient MouseListener mouseListener;
transient MouseMotionListener mouseMotionListener;
/** Internal, constants for serialization */
final static String actionListenerK = "actionL";
final static String adjustmentListenerK = "adjustmentL";
final static String componentListenerK = "componentL";
final static String containerListenerK = "containerL";
final static String focusListenerK = "focusL";
final static String itemListenerK = "itemL";
final static String keyListenerK = "keyL";
final static String mouseListenerK = "mouseL";
final static String mouseMotionListenerK = "mouseMotionL";
final static String textListenerK = "textL";
final static String windowListenerK = "windowL";
// The eventMask is ONLY set by subclasses via enableEvents.
// The mask should NOT be set when listeners are registered
// so that we can distinguish the difference between when
// listeners request events and subclasses request them.
long eventMask;
/**
* Static properties for incremental drawing.
* @see #imageUpdate
*/
static boolean isInc;
static int incRate;
static {
String s;
s = System.getProperty("awt.image.incrementaldraw");
isInc = (s == null || s.equals("true"));
s = System.getProperty("awt.image.redrawrate");
incRate = (s != null) ? Integer.parseInt(s) : 100;
}
/**
* Ease-of-use constant for <code>getAlignmentY()</code>. Specifies an
* alignment to the top of the component.
* @see #getAlignmentY
*/
public static final float TOP_ALIGNMENT = 0.0f;
/**
* Ease-of-use constant for <code>getAlignmentY</code> and
* <code>getAlignmentX</code>. Specifies an alignment to
* the center of the component
* @see #getAlignmentX
* @see #getAlignmentY
*/
public static final float CENTER_ALIGNMENT = 0.5f;
/**
* Ease-of-use constant for <code>getAlignmentY</code>. Specifies an
* alignment to the bottom of the component.
* @see #getAlignmentY
*/
public static final float BOTTOM_ALIGNMENT = 1.0f;
/**
* Ease-of-use constant for <code>getAlignmentX</code>. Specifies an
* alignment to the left side of the component.
* @see #getAlignmentX
*/
public static final float LEFT_ALIGNMENT = 0.0f;
/**
* Ease-of-use constant for <code>getAlignmentX</code>. Specifies an
* alignment to the right side of the component.
* @see #getAlignmentX
*/
public static final float RIGHT_ALIGNMENT = 1.0f;
/*
* JDK 1.1 serialVersionUID
*/
private static final long serialVersionUID = -7644114512714619750L;
/**
* Constructs a new component. Class <code>Component</code> can be
* extended directly to create a lightweight component that does not
* utilize an opaque native window. A lightweight component must be
* hosted by a native container somewhere higher up in the component
* tree (for example, by a <code>Frame</code> object).
*/
protected Component() {
}
/**
* Construct a name for this component. Called by getName() when the
* name is null.
*/
String constructComponentName() {
return null; // For strict compliance with prior JDKs, a Component
// that doesn't set its name should return null from
// getName();
}
/**
* Gets the name of the component.
* @return This component's name.
* @see #setName
* @since JDK1.1
*/
public String getName() {
if (name == null && !nameExplicitlySet) {
synchronized(this) {
if (name == null && !nameExplicitlySet)
name = constructComponentName();
}
}
return name;
}
/**
* Sets the name of the component to the specified string.
* @param <code>name</code> The string that is to be this
* component's name.
* @see #getName
* @since JDK1.1
*/
public void setName(String name) {
synchronized(this) {
this.name = name;
nameExplicitlySet = true;
}
}
/**
* Gets the parent of this component.
* @return The parent container of this component.
* @since JDK1.0
*/
public Container getParent() {
return parent;
}
/**
* @deprecated As of JDK version 1.1,
* programs should not directly manipulate peers.
*/
public ComponentPeer getPeer() {
return peer;
}
/**
* Gets this component's locking object (the object that owns the thread
* sychronization monitor) for AWT component-tree and layout
* operations.
* @return This component's locking object.
*/
public final Object getTreeLock() {
return LOCK;
}
/**
* Gets the toolkit of this component. Note that
* the frame that contains a component controls which
* toolkit is used by that component. Therefore if the component
* is moved from one frame to another, the toolkit it uses may change.
* @return The toolkit of this component.
* @since JDK1.0
*/
public Toolkit getToolkit() {
ComponentPeer peer = this.peer;
if ((peer != null) && ! (peer instanceof java.awt.peer.LightweightPeer)){
return peer.getToolkit();
}
Container parent = this.parent;
if (parent != null) {
return parent.getToolkit();
}
return Toolkit.getDefaultToolkit();
}
/**
* Determines whether this component is valid. Components are
* invalidated when they are first shown on the screen.
* @return <code>true</code> if the component is valid; <code>false</code>
* otherwise.
* @see #validate
* @see #invalidate
* @since JDK1.0
*/
public boolean isValid() {
return (peer != null) && valid;
}
/**
* Determines whether this component is visible. Components are
* initially visible, with the exception of top level components such
* as <code>Frame</code> objects.
* @return <code>true</code> if the component is visible;
* <code>false</code> otherwise.
* @see #setVisible
* @since JDK1.0
*/
public boolean isVisible() {
return visible;
}
/**
* Determines whether this component is showing on screen. This means
* that the component must be visible, and it must be in a container
* that is visible and showing.
* @return <code>true</code> if the component is showing;
* <code>false</code> otherwise.
* @see #setVisible
* @since JDK1.0
*/
public boolean isShowing() {
if (visible && (peer != null)) {
Container parent = this.parent;
return (parent == null) || parent.isShowing();
}
return false;
}
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -