java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JLayeredPane
public class JLayeredPane
JLayeredPane
为 JFC/Swing 容器添加了深度,允许组件在需要时互相重叠。Integer
对象指定容器中每个组件的深度,其中编号较高的组件位于其他组件之上。有关面向任务的文档和使用分层窗格的示例,请参阅 The Java Tutorial 中的 How to Use a Layered Pane 一节。
|
JLayeredPane
将该深度范围分成几个不同的层。将组件放入相应的层,这样更容易确保组件正确地重叠,而不必担心为具体的深度指定编号:
JLayeredPane
的方法
moveToFront(Component)
、
moveToBack(Component)
和
setPosition
在组件所在层中对其进行重定位。还可以使用
setLayer
方法更改该组件的当前层。
JLayeredPane
以类似
Container
的方式管理其子级列表,但允许在其内部定义多个层。对同一层中子级的管理就像普通的
Container
对象一样,但添加的功能是,当子组件重叠时,高层中的子组件显示在低层中的子组件之上。
每一层都是一个不同的整数。可以在调用 add 的过程中通过传递 Integer
对象,从而在 Component
上设置 layer 属性。
例如:
layeredPane.add(child, JLayeredPane.DEFAULT_LAYER); 或者 layeredPane.add(child, new Integer(10));还可以通过在
JLayeredPane
上进行如下调用在 Component 上设置 layer 属性:
layeredPaneParent.setLayer(child, 10)
JLayeredPane
是该 Component 的父组件。应该将子组件添加到父组件
之前 设置 layer 属性。
编号较高的层显示在编号较低的层之上。因此,对于每个组件,使用其层编号和字母即可,有代表性的列表顺序如下所示:
5a, 5b, 5c, 2a, 2b, 2c, 1a其中最左边的组件最接近显示区的顶部。
可以通过调用 moveToFront
或 moveToBack
将组件移入到其所在层的顶部或底部位置。
还可以直接指定某层中组件的位置。有效的位置范围是从 0 到该层中组件数减一所得的值。值 -1 指示最底层位置。值 0 指示最顶层位置。与层的编号不同,较高的位置值显示在较低 处。
注: 此序列(通过 java.awt.Container 定义)与层的编号序列相反。可是通常使用的是以下是使用方法 add(Component, layer, position) 的一些示例:调用 add(5x, 5, -1) 得到:moveToFront
、moveToBack
和setLayer
方法。
5a, 5b, 5c, 5x, 2a, 2b, 2c, 1a调用 add(5z, 5, 2) 得到:
5a, 5b, 5z, 5c, 5x, 2a, 2b, 2c, 1a调用 add(3a, 3, 7) 得到:
5a, 5b, 5z, 5c, 5x, 3a, 2a, 2b, 2c, 1a使用正常的 paint/event 机制会使 1a 出现在底部,5a 出现在所有其他组件之上。
注: 这些层只是一个逻辑构造,LayoutManager 将影响此容器的所有子组件,而不管其层设置如何。
警告:Swing 不是线程安全的。有关更多信息,请参阅 Swing's Threading Policy。
警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans
包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder
。
嵌套类摘要 | |
---|---|
protected class |
JLayeredPane.AccessibleJLayeredPane 此类实现对 JLayeredPane 类的可访问性支持。 |
从类 javax.swing.JComponent 继承的嵌套类/接口 |
---|
JComponent.AccessibleJComponent |
从类 java.awt.Container 继承的嵌套类/接口 |
---|
Container.AccessibleAWTContainer |
从类 java.awt.Component 继承的嵌套类/接口 |
---|
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy |
字段摘要 | |
---|---|
static Integer |
DEFAULT_LAYER 定义 Default 层的便捷对象。 |
static Integer |
DRAG_LAYER 定义 Drag 层的便捷对象。 |
static Integer |
FRAME_CONTENT_LAYER 定义 Frame Content 层的便捷对象。 |
static String |
LAYER_PROPERTY 绑定属性 |
static Integer |
MODAL_LAYER 定义 Modal 层的便捷对象。 |
static Integer |
PALETTE_LAYER 定义 Palette 层的便捷对象。 |
static Integer |
POPUP_LAYER 定义 Popup 层的便捷对象。 |
从类 javax.swing.JComponent 继承的字段 |
---|
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
从类 java.awt.Component 继承的字段 |
---|
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
从接口 java.awt.image.ImageObserver 继承的字段 |
---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
构造方法摘要 | |
---|---|
JLayeredPane() 创建新的 JLayeredPane |
方法摘要 | |
---|---|
protected void |
addImpl(Component comp, Object constraints, int index) 将指定组件添加到此容器的指定索引所在的位置上。 |
AccessibleContext |
getAccessibleContext() 获得与此 JLayeredPane 关联的 AccessibleContext。 |
int |
getComponentCountInLayer(int layer) 返回指定层中当前的子组件数。 |
Component[] |
getComponentsInLayer(int layer) 返回指定层中组件的数组。 |
protected Hashtable<Component,Integer> |
getComponentToLayer() 返回将组件映射到层的哈希表。 |
int |
getIndexOf(Component c) 返回指定 Component 的索引。 |
int |
getLayer(Component c) 返回指定 Component 的 layer 属性。 |
static int |
getLayer(JComponent c) 获得 JComponent 的 layer 属性,此方法不会产生与 setLayer() 类似的副作用(绘制、添加/移除等)。 |
static JLayeredPane |
getLayeredPaneAbove(Component c) 一个便捷方法,它返回包含指定组件的第一个 JLayeredPane。 |
protected Integer |
getObjectForLayer(int layer) 返回与指定层关联的 Integer 对象。 |
int |
getPosition(Component c) 获得该组件在其所在层中的相对位置。 |
int |
highestLayer() 返回所有当前子组件的最高层值。 |
protected int |
insertIndexForLayer(int layer, int position) 一个根据层和位置要求确定插入新子组件的正确位置的基本方法。 |
boolean |
isOptimizedDrawingEnabled() 如果窗格中的组件可以重叠,则返回 false(因为这会导致最优绘制无法进行)。 |
int |
lowestLayer() 返回所有当前子组件的最低层值。 |
void |
moveToBack(Component c) 将该组件移到当前层中所有组件的底层(位置 -1)。 |
void |
moveToFront(Component c) 将该组件移到当前层中所有组件的顶层(位置 0)。 |
void |
paint(Graphics g) 在指定的图形上下文中绘制此 JLayeredPane。 |
protected String |
paramString() 返回此 JLayeredPane 的字符串表示形式。 |
static void |
putLayer(JComponent c, int layer) 设置 JComponent 上的 layer 属性。 |
void |
remove(int index) 从此窗格中移除已索引的组件。 |
void |
removeAll() 从此容器中移除所有组件。 |
void |
setLayer(Component c, int layer) 设置指定组件的 layer 属性,使之成为该层中最底部的组件。 |
void |
setLayer(Component c, int layer, int position) 为指定组件设置 layer 属性,并设置它在该层中的位置。 |
void |
setPosition(Component c, int position) 将该组件移到当前层中的 position 处,其中 0 表示该层中的最顶层位置,-1 表示最底层位置。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
public static final Integer DEFAULT_LAYER
public static final