Module java.desktop
Package javax.swing

Class JLayeredPane

所有已实现的接口:
ImageObserver, MenuContainer, Serializable, Accessible
直接已知的子类:
JDesktopPane

@JavaBean(defaultProperty="accessibleContext") public class JLayeredPane extends JComponent implements Accessible
JLayeredPane为JFC/Swing容器添加了深度,允许组件在需要时重叠。一个Integer对象指定容器中每个组件的深度,数字越高的组件就会位于其他组件的上方。有关任务导向的文档和使用分层窗格的示例,请参阅如何使用分层窗格,这是The Java Tutorial中的一个部分。

示例:

以下文本描述此图像。

为方便起见,JLayeredPane将深度范围划分为几个不同的层。将组件放入其中一层可以确保组件正确重叠,而无需担心为特定深度指定数字:
DEFAULT_LAYER
标准层,大多数组件都在此层。这是最底层。
PALETTE_LAYER
调色板层位于默认层之上。适用于浮动工具栏和调色板,以便它们可以定位在其他组件之上。
MODAL_LAYER
用于模态对话框的层。它们将显示在容器中任何工具栏、调色板或标准组件的顶部。
POPUP_LAYER
弹出层显示在对话框之上。这样,与组合框、工具提示和其他帮助文本相关联的弹出窗口将显示在生成它们的组件、调色板或对话框之上。
DRAG_LAYER
拖动组件时,将其重新分配到拖动层可确保它位于容器中的每个其他组件之上。拖动完成后,可以将其重新分配到其正常层。
JLayeredPane的方法moveToFront(Component)moveToBack(Component)setPosition可用于重新定位组件在其层内的位置。还可以使用setLayer方法更改组件的当前层。

详细信息

JLayeredPaneContainer一样管理其子级列表,但允许在其内部定义几个层。在同一层中的子级与普通的Container对象完全相同,但具有一个额外的功能,即当子组件重叠时,较高层中的子组件会显示在较低层中的子组件上方。

每个层都是一个独特的整数数字。可以通过在添加调用期间传递一个Integer对象来在Component上设置层属性。
例如:

     layeredPane.add(child, JLayeredPane.DEFAULT_LAYER);
 或
     layeredPane.add(child, Integer.valueOf(10));
 
层属性也可以通过在JLayeredPane上调用
     layeredPaneParent.setLayer(child, 10)
来在组件上设置。应在将子级添加到父级之前设置层属性。

较高数字的层会显示在较低数字的层之上。因此,使用数字表示层,使用字母表示单个组件,代表性的列表顺序如下:

       5a, 5b, 5c, 2a, 2b, 2c, 1a 
其中最左边的组件最接近显示的顶部。

可以通过调用moveToFrontmoveToBack将组件移动到其层内的顶部或底部位置。

还可以直接指定组件在层内的位置。有效位置范围从0到该层中组件数量减1。值为-1表示最底部位置。值为0表示最顶部位置。与层号不同,较高的位置值在显示中更低。

注意: 这个顺序(由java.awt.Container定义)与层编号顺序相反。通常,您将使用moveToFrontmoveToBacksetLayer
以下是使用方法add(Component, layer, position)的一些示例:调用add(5x, 5, -1)的结果是:
       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 
使用正常的绘制/事件机制会导致1a出现在底部,5a位于所有其他组件之上。

注意: 这些层只是一个逻辑构造,布局管理器将影响此容器的所有子组件,而不考虑层设置。

警告: Swing不是线程安全的。有关更多信息,请参阅Swing的线程策略

警告: 该类的序列化对象将不兼容未来的Swing版本。当前的序列化支持适用于短期存储或在运行相同版本Swing的应用程序之间进行RMI。从1.4开始,已将所有JavaBeans的长期存储支持添加到java.beans包中。请参阅XMLEncoder

自 JDK 版本:
1.2
  • Field Details

    • DEFAULT_LAYER

      public static final Integer DEFAULT_LAYER
      定义默认层的便利对象。等同于Integer.valueOf(0)。
    • PALETTE_LAYER

      public static final Integer PALETTE_LAYER
      定义调色板层的便利对象。等同于Integer.valueOf(100)。
    • DRAG_LAYER

      public static final Integer DRAG_LAYER
      定义拖动层的便利对象。等同于Integer.valueOf(400)。
    • FRAME_CONTENT_LAYER

      public static final Integer FRAME_CONTENT_LAYER
      定义框架内容层的便利对象。通常仅用于定位JFrame的contentPane和menuBar组件。等同于Integer.valueOf(-30000)。
      参见:
    • LAYER_PROPERTY

      public static final String LAYER_PROPERTY
      绑定属性
      参见:
  • Constructor Details

    • JLayeredPane

      public JLayeredPane()
      创建一个新的JLayeredPane
  • Method Details

    • remove

      public void remove(int index)
      从此窗格中删除索引组件。这是绝对索引,忽略层。
      覆盖:
      remove 在类 Container
      参数:
      index - 指定要移除的组件的整数
      参见:
    • removeAll

      public void removeAll()
      从此容器中删除所有组件。
      覆盖:
      removeAll 在类 Container
      自:
      1.5
      参见:
    • isOptimizedDrawingEnabled

      @BeanProperty(bound=false) public boolean isOptimizedDrawingEnabled()
      如果面板中的组件可以重叠,使得优化绘制变得不可能,则返回false。否则返回true。
      覆盖:
      isOptimizedDrawingEnabled 在类 JComponent
      返回:
      如果组件可以重叠则返回false,否则返回true
      参见:
    • putLayer

      public static void putLayer(JComponent c, int layer)
      设置JComponent上的层属性。此方法不会引起任何副作用,如setLayer()(绘制、添加/移除等)。通常应该使用实例方法setLayer(),以获得所需的副作用(如重绘)。
      参数:
      c - 要移动的JComponent
      layer - 指定要移动到的层的整数
      参见:
    • getLayer

      public static int getLayer(JComponent c)
      获取JComponent的层属性,不会引起任何副作用,如setLayer()(绘制、添加/移除等)。通常应该使用实例方法getLayer()。
      参数:
      c - 要检查的JComponent
      返回:
      指定组件的层的整数
    • getLayeredPaneAbove

      public static JLayeredPane getLayeredPaneAbove(Component c)
      返回包含指定组件的第一个JLayeredPane的便捷方法。请注意,所有JFrames都有一个JLayeredPane作为其根,因此JFrame中的任何组件都将具有JLayeredPane父级。
      参数:
      c - 要检查的组件
      返回:
      包含该组件的JLayeredPane,如果在组件层次结构中找不到JLayeredPane,则返回null
      参见:
    • setLayer

      public void setLayer(Component c, int layer)
      设置指定组件的层属性,使其成为该层中最底部的组件。应在添加到父级之前调用。
      参数:
      c - 要设置层的组件
      layer - 指定要设置的层的整数,较低的数字靠近底部
    • setLayer

      public void setLayer(Component c, int layer, int position)
      设置指定组件的层属性,并设置其在该层中的位置。
      参数:
      c - 要设置层的组件
      layer - 指定要设置的层的整数,较低的数字靠近底部
      position - 指定在层内的位置的整数,其中0是最顶部位置,-1是最底部位置
    • getLayer

      public int getLayer(Component c)
      返回指定组件的层属性。
      参数:
      c - 要检查的组件
      返回:
      指定组件当前层的整数
    • getIndexOf

      public int getIndexOf(Component c)
      返回指定组件的索引。这是绝对索引,忽略层。索引号,如位置号,顶部组件的索引为零。较大的数字靠近底部。
      参数:
      c - 要检查的组件
      返回:
      指定组件的索引的整数
    • moveToFront

      public void moveToFront(Component c)
      将组件移动到其当前层中的顶部(位置0)。
      参数:
      c - 要移动的组件
      参见:
    • moveToBack

      public void moveToBack(Component c)
      将组件移动到其当前层中的底部(位置-1)。
      参数:
      c - 要移动的组件
      参见:
    • setPosition

      public void setPosition(Component c, int position)
      将组件移动到其当前层中的position位置,其中0是层内最顶部的位置,-1是层内最底部的位置。

      注意: 位置编号由java.awt.Container定义,并且与层编号相反。较低的位置编号靠近顶部(0是最顶部),较高的位置编号靠近底部。

      参数:
      c - 要移动的组件
      position - 在-1..N-1范围内的整数,其中N是组件当前层中的组件数
    • getPosition

      public int getPosition(Component c)
      获取组件在其层内的相对位置。
      参数:
      c - 要检查的组件
      返回:
      一个整数,表示组件的位置,其中0是最顶部位置,最高索引值=该层中组件的计数减1
      参见:
    • highestLayer

      public int highestLayer()
      返回所有当前子级中的最高层值。如果没有子级,则返回0。
      返回:
      一个整数,指示面板中顶部组件的层,如果没有子级则返回0
    • lowestLayer

      public int lowestLayer()
      返回所有当前子级中的最低层值。如果没有子级,则返回0。
      返回:
      一个整数,指示面板中底部组件的层,如果没有子级则返回0
    • getComponentCountInLayer

      public int getComponentCountInLayer(int layer)
      返回当前在指定层中的子级数。
      参数:
      layer - 指定要检查的层
      返回:
      一个整数,指定该层中的组件数
    • getComponentsInLayer

      public Component[] getComponentsInLayer(int layer)
      返回指定层中组件的数组。
      参数:
      layer - 指定要检查的层
      返回:
      包含该层中的组件的数组
    • paint

      public void paint(Graphics g)
      在指定的图形上下文中绘制此JLayeredPane。
      覆盖:
      paint 在类 JComponent
      参数:
      g - 用于绘制的图形上下文
      参见:
    • getComponentToLayer

      protected Hashtable<Component,Integer> getComponentToLayer()
      返回将组件映射到层的哈希表。
      返回:
      用于将组件映射到其层的哈希表
    • getObjectForLayer

      protected Integer getObjectForLayer(int layer)
      返回与指定层关联的Integer对象。
      参数:
      layer - 指定的层
      返回:
      该层的Integer对象
    • insertIndexForLayer

      protected int insertIndexForLayer(int layer, int position)
      基本方法,根据层和位置请求确定插入新子级的适当位置。
      参数:
      layer - 指定的层
      position - 指定层内位置的整数
      返回:
      一个整数,给出(绝对)插入索引
      参见:
    • paramString

      protected String paramString()
      返回此JLayeredPane的字符串表示形式。此方法仅用于调试目的,返回的字符串的内容和格式可能因实现而异。返回的字符串可能为空,但不能为null
      覆盖:
      paramString 在类 JComponent
      返回:
      此JLayeredPane的字符串表示形式。
    • getAccessibleContext

      @BeanProperty(bound=false) public AccessibleContext getAccessibleContext()
      获取与此JLayeredPane关联的AccessibleContext。对于分层窗格,AccessibleContext采用AccessibleJLayeredPane的形式。如果需要,将创建一个新的AccessibleJLayeredPane实例。
      指定者:
      getAccessibleContext 在接口 Accessible
      覆盖:
      getAccessibleContext 在类 Component
      返回:
      作为此JLayeredPane的AccessibleContext的AccessibleJLayeredPane