模块  java.desktop
软件包  javax.swing

Class JLayeredPane

  • 实现的所有接口
    ImageObserverMenuContainerSerializableAccessible
    已知直接子类:
    JDesktopPane

    @JavaBean(defaultProperty="accessibleContext")
    public class JLayeredPane
    extends JComponent
    implements Accessible
    JLayeredPane为JFC / Swing容器添加深度,允许组件在需要时相互重叠。 Integer对象指定容器中每个组件的深度,其中编号较高的组件位于其他组件的“顶部”。 有关面向任务的文档和使用分层窗格的示例,请参阅“Java教程” How to Use a Layered Pane部分。 Example

    The following text describes this image.

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

    细节

    JLayeredPane管理其子项列表,如Container ,但允许在其自身内定义多个层。 同一层中的子项的管理方式与普通的Container对象完全相同,添加的功能是,当子组件重叠时,较高层中的子项显示在较低层中的子项上方。

    每个层都是一个不同的整数。 通过在add调用期间传递Integer对象,可以在Component上设置layer属性。
    例如:

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

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

      5a, 5b, 5c, 2a, 2b, 2c, 1a 
    最左边的组件最靠近显示器顶部的位置。

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

    也可以直接指定层中组件的位置。 有效位置的范围从0到1小于该层中的组件数。 值-1表示最低位置。 值0表示最高位置。 与图层编号不同,显示屏中较高的位置值较低

    Note: This sequence (defined by java.awt.Container) is the reverse of the layer numbering sequence. Usually though, you will use moveToFront, moveToBack, and setLayer.
    以下是使用方法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高于所有其他组件。

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

    警告: Swing不是线程安全的。 有关更多信息,请参阅Swing's Threading Policy

    警告:此类的序列化对象与以后的Swing版本不兼容。 当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。 从1.4开始, java.beans软件包中添加了对所有JavaBeans java.beans长期存储的支持。 请参阅XMLEncoder

    从以下版本开始:
    1.2
    另请参见:
    Serialized Form
    • 字段详细信息

      • DEFAULT_LAYER

        public static final Integer DEFAULT_LAYER
        定义默认图层的便捷对象。 相当于Integer.valueOf(0)。
      • PALETTE_LAYER

        public static final Integer PALETTE_LAYER
        定义Palette图层的便捷对象。 相当于Integer.valueOf(100)。
      • MODAL_LAYER

        public static final Integer MODAL_LAYER
        定义Modal图层的便捷对象。 相当于Integer.valueOf(200)。
      • POPUP_LAYER

        public static final Integer POPUP_LAYER
        定义Popup图层的便捷对象。 相当于Integer.valueOf(300)。
      • DRAG_LAYER

        public static final Integer DRAG_LAYER
        定义Drag图层的便捷对象。 相当于Integer.valueOf(400)。
      • FRAME_CONTENT_LAYER

        public static final Integer FRAME_CONTENT_LAYER
        定义框架内容层的便捷对象。 此图层通常仅用于定位JFrame的contentPane和menuBar组件。 相当于Integer.valueOf(-30000)。
        另请参见:
        JFrame
    • 构造方法详细信息

      • JLayeredPane

        public JLayeredPane()
        创建一个新的JLayeredPane
    • 方法详细信息

      • remove

        public void remove​(int index)
        从此窗格中删除索引组件。 这是绝对索引,忽略了图层。
        重写:
        remove在类 Container
        参数
        index - 指定要删除的组件的int
        另请参见:
        getIndexOf(java.awt.Component)
      • putLayer

        public static void putLayer​(JComponent c,
                                    int layer)
        在JComponent上设置layer属性。 此方法不会导致任何副作用,如setLayer()(绘画,添加/删除等)。 通常你应该使用实例方法setLayer(),以获得所需的副作用(如重新绘制)。
        参数
        c - 要移动的JComponent
        layer - 指定要将其移动到的图层的int
        另请参见:
        setLayer(java.awt.Component, int)
      • getLayer

        public static int getLayer​(JComponent c)
        获取JComponent的layer属性,它不会导致任何副作用,如setLayer()。 (绘画,添加/删除等)通常你应该使用实例方法getLayer()。
        参数
        c - 要检查的JComponent
        结果
        指定组件层的int
      • getLayeredPaneAbove

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

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

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

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

        public int getIndexOf​(Component c)
        返回指定Component的索引。 这是绝对索引,忽略了图层。 索引号,如位置号,在索引零处具有最顶层的组件。 较大的数字更接近底部。
        参数
        c - 要检查的组件
        结果
        指定组件索引的int
      • moveToFront

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

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

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

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

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

        public int getPosition​(Component c)
        获取组件在其图层中的相对位置。
        参数
        c - 要检查的组件
        结果
        给出组件位置的int,其中0是最高位置,最高索引值=该层组件的计数,减去1
        另请参见:
        getComponentCountInLayer(int)
      • highestLayer

        public int highestLayer()
        返回所有当前子项的最高层值。 如果没有孩子,则返回0。
        结果
        一个int,指示窗格中最顶层组件的层,如果没有子节点则为零
      • lowestLayer

        public int lowestLayer()
        返回所有当前子项的最低层值。 如果没有孩子,则返回0。
        结果
        一个int,指示窗格中最底部组件的图层,如果没有子项,则为零
      • getComponentCountInLayer

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

        public Component[] getComponentsInLayer​(int layer)
        返回指定图层中组件的数组。
        参数
        layer - 指定要检查的图层的int
        结果
        该层中包含的一组Components
      • getComponentToLayer

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

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

        protected int insertIndexForLayer​(int layer,
                                          int position)
        原始方法,用于根据图层和位置请求确定插入新子项的正确位置。
        参数
        layer - 指定图层的int
        position - 指定图层内位置的int
        结果
        给出(绝对)插入索引的int
        另请参见:
        getIndexOf(java.awt.Component)
      • paramString

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

        @BeanProperty(bound=false)
        public AccessibleContext getAccessibleContext()
        获取与此JLayeredPane关联的AccessibleContext。 对于分层窗格,AccessibleContext采用AccessibleJLayeredPane的形式。 如有必要,将创建一个新的AccessibleJLayeredPane实例。
        Specified by:
        getAccessibleContext在界面 Accessible
        重写:
        getAccessibleContext在类 Component
        结果
        an AccessibleJLayeredPane that serves as the AccessibleContext of this JLayeredPane