Module  java.desktop
软件包  javax.swing

Class JLayeredPane

  • All Implemented Interfaces:
    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对象一样,附加功能是当儿童组件重叠时,较高层的儿童显示在较低层的孩子之上。

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

      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开始,对所有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
        定义调色板层的方便对象。 相当于Integer.valueOf(100)。
      • MODAL_LAYER

        public static final Integer MODAL_LAYER
        定义模态层的便利对象。 相当于Integer.valueOf(200)。
      • POPUP_LAYER

        public static final Integer POPUP_LAYER
        定义Popup图层的便利对象。 相当于Integer.valueOf(300)。
      • 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)。
        另请参见:
        JFrame
    • 构造方法详细信息

      • JLayeredPane

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

      • addImpl

        protected void addImpl​(Component comp,
                               Object constraints,
                               int index)
        描述从类复制: Container
        在指定的索引处将指定的组件添加到此容器。 此方法还通过布局管理器通过addLayoutComponent方法使用指定的约束对象将组件添加到此容器的布局。

        约束由正在使用的特定布局管理器定义。 例如, BorderLayout类定义了五个约束: BorderLayout.NORTHBorderLayout.SOUTHBorderLayout.EASTBorderLayout.WEST ,和BorderLayout.CENTER

        GridBagLayout课程需要一个GridBagConstraints对象。 未通过正确类型的约束对象会导致一个IllegalArgumentException

        如果当前的布局管理器实现LayoutManager2 ,那么就调用LayoutManager2.addLayoutComponent(Component,Object) 如果当前的布局管理器不实现LayoutManager2 ,并且约束是一个String ,那么它将调用LayoutManager.addLayoutComponent(String,Component)

        如果组件不是此容器的祖先,并且具有非空父项,则在将其添加到此容器之前,它将从其当前父进程中删除。

        如果程序需要跟踪每个添加到容器的请求,那么这种方法将会覆盖所有其他添加方法。 一个重写方法通常应该包括调用超类的方法版本:

        super.addImpl(comp, constraints, index)

        该方法更改布局相关信息,因此使组件层次结构无效。 如果容器已经被显示,则此后必须验证层次结构,以显示添加的组件。

        重写:
        addImplContainer
        参数
        comp - 要添加的组件
        constraints - 表示此组件的布局约束的对象
        index - 容器列表中要插入组件的位置,其中 -1表示附加到最后
        另请参见:
        Container.add(Component)Container.add(Component, int)Container.add(Component, java.lang.Object)Container.invalidate()LayoutManagerLayoutManager2
      • remove

        public void remove​(int index)
        从此窗格中删除索引的组件。 这是绝对的索引,忽略了层。
        重写:
        removeContainer
        参数
        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。 请注意,所有JFrames的根目录都有一个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指定要检查的图层
        结果
        该层中包含的一组组件
      • getComponentToLayer

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

        protected Integer getObjectForLayer​(int layer)
        返回与指定图层相关联的整数对象。
        参数
        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
        重写:
        paramStringJComponent
        结果
        这个JLayeredPane的字符串表示形式。
      • getAccessibleContext

        @BeanProperty(bound=false)
        public AccessibleContext getAccessibleContext​()
        获取与此JLayeredPane关联的AccessibleContext。 对于分层窗格,AccessibleContext采用AccessibleJLayeredPane的形式。 如有必要,将创建一个新的AccessibleJLayeredPane实例。
        Specified by:
        getAccessibleContext在接口 Accessible
        重写:
        getAccessibleContextComponent
        结果
        一个AccessibleJLayeredPane,作为这个JLayeredPane的AccessibleContext