javax.swing

Class JLayeredPane

public class JLayeredPane extends JComponent implements Accessible

A container that adds depth to the usual Container semantics. Each child component of a Layered Pane is placed within one of several layers. JLayeredPane defines a set of standard layers. The pre-defined sets are (in the order from button to top):
{@link #DEFAULT_LAYER}
The layer where most of the normal components are placed. This is the bottommost layer.
{@link #PALETTE_LAYER}
Palette windows are placed in this layer.
{@link #MODAL_LAYER}
The layer where internal modal dialog windows are placed.
{@link #POPUP_LAYER}
The layer for popup menus
{@link #DRAG_LAYER}
Components that are beeing dragged are temporarily placed in this layer.

A child is in exactly one of these layers at any time, though there may be other layers if someone creates them.

You can add a component to a specific layer using the {@link Container#add(Component, Object)} method. I.e. layeredPane.add(comp, JLayeredPane.MODAL_LAYER) will add the component comp to the modal layer of layeredPane.

To change the layer of a component that is already a child of a JLayeredPane, use the {@link #setLayer(Component, int)} method.

The purpose of this class is to translate this view of "layers" into a contiguous array of components: the one held in our ancestor, {@link java.awt.Container}.

There is a precise set of words we will use to refer to numbers within this class:

Component Index:
An offset into the component array held in our ancestor, {@link java.awt.Container}, from [0 .. component.length). The drawing rule with indices is that 0 is drawn last.
Layer Number:
A general int specifying a layer within this component. Negative numbers are drawn first, then layer 0, then positive numbered layers, in ascending order.
Position:
An offset into a layer's "logical drawing order". Layer position 0 is drawn last. Layer position -1 is a synonym for the first layer position (the logical "bottom").

Note: the layer numbering order is the reverse of the component indexing and position order

Nested Class Summary
protected classJLayeredPane.AccessibleJLayeredPane
Provides accessibility support for JLayeredPane.
Field Summary
static IntegerDEFAULT_LAYER
static IntegerDRAG_LAYER
static IntegerFRAME_CONTENT_LAYER
static StringLAYER_PROPERTY
static IntegerMODAL_LAYER
static IntegerPALETTE_LAYER
static IntegerPOPUP_LAYER
Constructor Summary
JLayeredPane()
Method Summary
protected voidaddImpl(Component comp, Object layerConstraint, int index)
Overrides the default implementation from {@link java.awt.Container} such that layerConstraint is interpreted as an {@link Integer}, specifying the layer to which the component will be added (at the bottom position).
AccessibleContextgetAccessibleContext()
Returns the accessible context for this JLayeredPane.
intgetComponentCountInLayer(int layer)
Return the number of components within a layer of this container.
Component[]getComponentsInLayer(int layer)
Return an array of all components within a layer of this container.
protected Hashtable<Component,Integer>getComponentToLayer()
Return a hashtable mapping child components of this container to Integer objects representing the component's layer assignments.
intgetIndexOf(Component c)
Return the index of a component within the underlying (contiguous) array of children.
intgetLayer(Component c)
Looks up the layer a child component is currently assigned to.
static intgetLayer(JComponent comp)
Looks up the layer in the client property with the key {@link #LAYER_PROPERTY} of comp.
static JLayeredPanegetLayeredPaneAbove(Component comp)
Returns the first JLayeredPane that contains the Component comp or null if comp is not contained in a JLayeredPane.
protected IntegergetObjectForLayer(int layer)
Return an Integer object which holds the same int value as the parameter.
intgetPosition(Component c)
Return the position of a component within its layer.
inthighestLayer()
Return the greatest layer number currently in use, in this container.
protected intinsertIndexForLayer(int layer, int position)
Computes an index at which to request the superclass {@link java.awt.Container} inserts a component, given an abstract layer and position number.
booleanisOptimizedDrawingEnabled()
Returns false if components in this layered pane can overlap, otherwise true.
intlowestLayer()
Return the least layer number currently in use, in this container.
voidmoveToBack(Component c)

Moves a component to the "back" of its layer.

voidmoveToFront(Component c)
Moves a component to the "front" of its layer.
voidpaint(Graphics g)
This method is overridden order to provide a reasonable painting mechanism for JLayeredPane.
static voidputLayer(JComponent component, int layer)
Sets the layer property for a JComponent.
voidremove(int index)
Removes a child from this container.
voidremoveAll()
Removes all components from this container.
voidsetLayer(Component c, int layer)

Set the layer property for a component, within this container.

voidsetLayer(Component c, int layer, int position)
Set the layer and position of a component, within this container.
voidsetPosition(Component c, int position)
Change the position of a component within its layer.

Field Detail

DEFAULT_LAYER

public static final Integer DEFAULT_LAYER

DRAG_LAYER

public static final Integer DRAG_LAYER

FRAME_CONTENT_LAYER

public static final Integer FRAME_CONTENT_LAYER

LAYER_PROPERTY

public static final String LAYER_PROPERTY

MODAL_LAYER

public static final Integer MODAL_LAYER

PALETTE_LAYER

public static final Integer PALETTE_LAYER

POPUP_LAYER

public static final Integer POPUP_LAYER

Constructor Detail

JLayeredPane

public JLayeredPane()

Method Detail

addImpl

protected void addImpl(Component comp, Object layerConstraint, int index)
Overrides the default implementation from {@link java.awt.Container} such that layerConstraint is interpreted as an {@link Integer}, specifying the layer to which the component will be added (at the bottom position). The argument index specifies the position within the layer at which the component should be added, where 0 is the top position greater values specify positions below that and -1 specifies the bottom position.

Parameters: comp the component to add layerConstraint an integer specifying the layer to add the component to index the position within the layer

getAccessibleContext

public AccessibleContext getAccessibleContext()
Returns the accessible context for this JLayeredPane.

Returns: the accessible context for this JLayeredPane

getComponentCountInLayer

public int getComponentCountInLayer(int layer)
Return the number of components within a layer of this container.

Parameters: layer the layer count components in

Returns: the number of components in the layer

getComponentsInLayer

public Component[] getComponentsInLayer(int layer)
Return an array of all components within a layer of this container. Components are ordered front-to-back, with the "front" element (which draws last) at position 0 of the returned array.

Parameters: layer the layer to return components from

Returns: the components in the layer

getComponentToLayer

protected Hashtable<Component,Integer> getComponentToLayer()
Return a hashtable mapping child components of this container to Integer objects representing the component's layer assignments.

getIndexOf

public int getIndexOf(Component c)
Return the index of a component within the underlying (contiguous) array of children. This is a "raw" number which does not represent the child's position in a layer, but rather its position in the logical drawing order of all children of the container.

Parameters: c the component to look up.

Returns: the external index of the component or -1 if c is not a child of this layered pane

getLayer

public int getLayer(Component c)
Looks up the layer a child component is currently assigned to. If c is an instance of {@link JComponent}, then the layer is fetched from the client property with the key {@link #LAYER_PROPERTY}. Otherwise it is looked up in an internal hashtable that maps non-JComponent components to layers. If the components cannot be found in either way, the {@link #DEFAULT_LAYER} is returned.

Parameters: c the component to look up.

Returns: the layer the component is currently assigned to; if the component is not in this layered pane, then 0 (DEFAULT_LAYER) is returned

getLayer

public static int getLayer(JComponent comp)
Looks up the layer in the client property with the key {@link #LAYER_PROPERTY} of comp. If no such property can be found, we return 0 ({@link #DEFAULT_LAYER}).

Parameters: comp the component for which the layer is looked up

Returns: the layer of comp as stored in the corresponding client property, or 0 if there is no such property

getLayeredPaneAbove

public static JLayeredPane getLayeredPaneAbove(Component comp)
Returns the first JLayeredPane that contains the Component comp or null if comp is not contained in a JLayeredPane.

Parameters: comp the component for which we are searching the JLayeredPane ancestor

Returns: the first JLayeredPane that contains the Component comp or null if comp is not contained in a JLayeredPane

getObjectForLayer

protected Integer getObjectForLayer(int layer)
Return an Integer object which holds the same int value as the parameter. This is strictly an optimization to minimize the number of identical Integer objects which we allocate.

Parameters: layer the layer number as an int.

Returns: the layer number as an Integer, possibly shared.

getPosition

public int getPosition(Component c)
Return the position of a component within its layer. Positions are assigned from the "front" (position 0) to the "back" (position N-1), and drawn from the back towards the front.

Parameters: c the component to get the position of

Returns: the position of c within its layer or -1 if c is not a child of this layered pane

See Also: JLayeredPane

highestLayer

public int highestLayer()
Return the greatest layer number currently in use, in this container. This number may legally be positive or negative.

Returns: the highest layer number

See Also: lowestLayer

insertIndexForLayer

protected int insertIndexForLayer(int layer, int position)
Computes an index at which to request the superclass {@link java.awt.Container} inserts a component, given an abstract layer and position number.

Parameters: layer the layer in which to insert a component. position the position in the layer at which to insert a component.

Returns: the index at which to insert the component.

isOptimizedDrawingEnabled

public boolean isOptimizedDrawingEnabled()
Returns false if components in this layered pane can overlap, otherwise true.

Returns: false if components in this layered pane can overlap, otherwise true

lowestLayer

public int lowestLayer()
Return the least layer number currently in use, in this container. This number may legally be positive or negative.

Returns: the least layer number

See Also: highestLayer

moveToBack

public void moveToBack(Component c)

Moves a component to the "back" of its layer. The "back" is a synonym for position N-1 (also known as position -1), where N is the size of the layer.

The "back" of a layer is the first position drawn, so the component at the "back" is usually the component which is occluded by the most other components in its layer.

Parameters: c the component to move to the back of its layer.

See Also: JLayeredPane

moveToFront

public void moveToFront(Component c)
Moves a component to the "front" of its layer. The "front" is a synonym for position 0, which is also the last position drawn in each layer, so is usually the component which occludes the most other components in its layer.

Parameters: c the component to move to the front of its layer

See Also: JLayeredPane

paint

public void paint(Graphics g)
This method is overridden order to provide a reasonable painting mechanism for JLayeredPane. This is necessary since JLayeredPane's do not have an own UI delegate. Basically this method clears the background for the JLayeredPane and then calls super.paint(g).

Parameters: g the graphics context to use

putLayer

public static void putLayer(JComponent component, int layer)
Sets the layer property for a JComponent.

Parameters: component the component for which to set the layer layer the layer property to set

remove

public void remove(int index)
Removes a child from this container. The child is specified by index. After removal, the child no longer occupies a layer.

Parameters: index the index of the child component to remove.

removeAll

public void removeAll()
Removes all components from this container.

Since: 1.5

setLayer

public void setLayer(Component c, int layer)

Set the layer property for a component, within this container. The component will be implicitly mapped to the bottom-most position in the layer, but only if added after calling this method.

Read that carefully: this method should be called before the component is added to the container.

Parameters: c the component to set the layer property for. layer the layer number to assign to the component.

setLayer

public void setLayer(Component c, int layer, int position)
Set the layer and position of a component, within this container.

Parameters: c the child component to set the layer property for. layer the layer number to assign to the component. position the position number to assign to the component.

setPosition

public void setPosition(Component c, int position)
Change the position of a component within its layer. Positions are assigned from the "front" (position 0) to the "back" (position N-1), and drawn from the back towards the front.

Parameters: c the component to change the position of position the position to assign the component to

See Also: JLayeredPane