Module java.desktop
Package java.awt

Class Container

所有已实现的接口:
ImageObserver, MenuContainer, Serializable
直接已知的子类:
BasicSplitPaneDivider, CellRendererPane, DefaultTreeCellEditor.EditorContainer, JComponent, Panel, ScrollPane, Window

public class Container extends Component
通用的抽象窗口工具包(AWT)容器对象是一个可以包含其他AWT组件的组件。

添加到容器中的组件将被跟踪在一个列表中。列表的顺序将定义容器内组件的前后堆叠顺序。如果在向容器添加组件时未指定索引,则将其添加到列表的末尾(因此添加到堆叠顺序的底部)。

注意: 有关焦点子系统的详细信息,请参阅如何使用焦点子系统,这是Java教程中的一个部分,以及有关更多信息的焦点规范

自:
1.0
另请参阅:
  • Constructor Details

    • Container

      public Container()
      构造一个新的Container。容器可以直接扩展,但在这种情况下是轻量级的,并且必须由组件树中更高处的某个父级容器(例如Frame)包含。
  • Method Details

    • getComponentCount

      public int getComponentCount()
      获取此面板中的组件数。

      注意: 此方法应在AWT树锁下调用。

      返回:
      此面板中的组件数。
      自:
      1.1
      另请参阅:
    • countComponents

      @Deprecated public int countComponents()
      Deprecated.
      As of JDK version 1.1, replaced by getComponentCount().
      返回此容器中的组件数。
      返回:
      此容器中的组件数
    • getComponent

      public Component getComponent(int n)
      获取此容器中的第n个组件。

      注意: 此方法应在AWT树锁下调用。

      参数:
      n - 要获取的组件的索引。
      返回:
      此容器中第n个组件。
      抛出:
      ArrayIndexOutOfBoundsException - 如果第n个值不存在。
      参见:
    • getComponents

      public Component[] getComponents()
      获取此容器中的所有组件。

      注意:此方法应在AWT树锁下调用。

      返回:
      此容器中所有组件的数组。
      参见:
    • getInsets

      public Insets getInsets()
      确定此容器的插图,指示容器边框的大小。

      例如,Frame对象具有与框架标题栏高度相对应的顶部插图。

      返回:
      此容器的插图。
      自版本:
      1.1
      参见:
    • insets

      @Deprecated public Insets insets()
      Deprecated.
      As of JDK version 1.1, replaced by getInsets().
      返回此容器的插图。
      返回:
      此容器的插图
    • add

      public Component add(Component comp)
      将指定的组件附加到此容器的末尾。这是addImpl(java.awt.Component, java.lang.Object, int)的便利方法。

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

      参数:
      comp - 要添加的组件
      返回:
      组件参数
      抛出:
      NullPointerException - 如果compnull
      参见:
    • add

      public Component add(String name, Component comp)
      将指定的组件添加到此容器。这是addImpl(java.awt.Component, java.lang.Object, int)的便利方法。

      此方法已在1.1版本中过时。请改用方法add(Component, Object)

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

      参数:
      name - 要添加的组件的名称
      comp - 要添加的组件
      返回:
      添加的组件
      抛出:
      NullPointerException - 如果compnull
      参见:
    • add

      public Component add(Component comp, int index)
      将指定的组件添加到此容器的指定位置。这是addImpl(java.awt.Component, java.lang.Object, int)的便利方法。

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

      参数:
      comp - 要添加的组件
      index - 要插入组件的位置,或-1以将组件附加到末尾
      返回:
      组件comp
      抛出:
      NullPointerException - 如果compnull
      IllegalArgumentException - 如果index无效(有关详细信息,请参见addImpl(java.awt.Component, java.lang.Object, int)
      参见:
    • setComponentZOrder

      public void setComponentZOrder(Component comp, int index)
      将指定的组件移动到容器中指定的z顺序索引。z顺序确定组件绘制的顺序;具有最高z顺序的组件首先绘制,具有最低z顺序的组件最后绘制。在组件重叠时,具有较低z顺序的组件会覆盖具有较高z顺序的组件。

      如果组件是其他容器的子级,则在添加到此容器之前将其从该容器中移除。此方法与java.awt.Container.add(Component, int)的重要区别在于,此方法在从其先前容器中移除组件时,除非必要且允许由底层本机窗口系统,否则不会调用removeNotify。这样,如果组件具有键盘焦点,则在移动到新位置时会保持焦点。

      此属性仅保证适用于轻量级非Container组件。

      此方法更改与布局相关的信息,因此会使组件层次结构无效。

      注意:并非所有平台都支持从一个容器中的重量级组件更改z顺序到另一个容器而不调用removeNotify。无法检测平台是否支持此功能,因此开发人员不应做任何假设。

      参数:
      comp - 要移动的组件
      index - 要插入组件的容器列表中的位置,其中getComponentCount()会将其附加到末尾
      抛出:
      NullPointerException - 如果compnull
      IllegalArgumentException - 如果comp是容器的父级之一
      IllegalArgumentException - 如果index不在[0, getComponentCount()]范围内以进行容器之间的移动,或者不在[0, getComponentCount()-1]范围内以在容器内部移动
      IllegalArgumentException - 如果将容器添加到自身
      IllegalArgumentException - 如果将Window添加到容器
      自版本:
      1.5
      参见:
    • getComponentZOrder

      public int getComponentZOrder(Component comp)
      返回容器中组件的z顺序索引。组件在z顺序层次结构中越高,其索引越低。具有最低z顺序索引的组件最后绘制,位于所有其他子组件之上。
      参数:
      comp - 被查询的组件
      返回:
      组件的z顺序索引;如果组件为null或不属于容器,则返回-1
      自版本:
      1.5
      参见:
    • add

      public void add(Component comp, Object constraints)
      将指定的组件添加到此容器的末尾。还通知布局管理器使用指定的约束对象将组件添加到此容器的布局中。这是addImpl(java.awt.Component, java.lang.Object, int)的便利方法。

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

      参数:
      comp - 要添加的组件
      constraints - 表达此组件的布局约束的对象
      抛出:
      NullPointerException - 如果compnull
      自版本:
      1.1
      参见:
    • add

      public void add(Component comp, Object constraints, int index)
      将指定的组件以指定的约束添加到此容器的指定索引处。还通知布局管理器使用指定的约束对象将组件添加到此容器的布局中。这是addImpl(java.awt.Component, java.lang.Object, int)的便利方法。

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

      参数:
      comp - 要添加的组件
      constraints - 表达此组件的布局约束的对象
      index - 要插入组件的容器列表中的位置;-1表示插入到末尾组件
      抛出:
      NullPointerException - 如果compnull
      IllegalArgumentException - 如果index无效(请参阅addImpl(java.awt.Component, java.lang.Object, int)了解详情)
      参见:
    • addImpl

      protected void addImpl(Component comp, Object constraints, int index)
      将指定的组件添加到此容器的指定索引处。此方法还通过addLayoutComponent方法通知布局管理器使用指定的约束对象将组件添加到此容器的布局中。

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

      GridBagLayout类需要一个GridBagConstraints对象。未传递正确类型的约束对象会导致IllegalArgumentException

      如果当前布局管理器实现了LayoutManager2,则会在其上调用LayoutManager2.addLayoutComponent(Component,Object)。如果当前布局管理器未实现LayoutManager2,并且约束是一个String,则会在其上调用LayoutManager.addLayoutComponent(String,Component)

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

      这是要覆盖的方法,如果程序需要跟踪对容器的每个添加请求,因为所有其他添加方法都会推迟到此方法。覆盖方法通常应包括对该方法的超类版本的调用:

      super.addImpl(comp, constraints, index)

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

      参数:
      comp - 要添加的组件
      constraints - 表达此组件的布局约束的对象
      index - 要插入组件的容器列表中的位置,其中-1表示追加到末尾
      抛出:
      IllegalArgumentException - 如果index无效;如果comp是此容器的子级,则有效范围为[-1, getComponentCount()-1];如果组件不是此容器的子级,则有效范围为[-1, getComponentCount()]
      IllegalArgumentException - 如果comp是此容器的祖先
      IllegalArgumentException - 如果将窗口添加到容器
      NullPointerException - 如果compnull
      自从:
      1.1
      参见:
    • remove

      public void remove(int index)
      从此容器中删除由index指定的组件。此方法还通过removeLayoutComponent方法通知布局管理器从此容器的布局中删除组件。

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

      参数:
      index - 要删除的组件的索引
      抛出:
      ArrayIndexOutOfBoundsException - 如果index不在范围[0, getComponentCount()-1]
      自从:
      1.1
      参见:
    • remove

      public void remove(Component comp)
      从此容器中删除指定的组件。此方法还通过removeLayoutComponent方法通知布局管理器从此容器的布局中删除组件。

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

      参数:
      comp - 要删除的组件
      抛出:
      NullPointerException - 如果compnull
      参见:
    • removeAll

      public void removeAll()
      从此容器中删除所有组件。此方法还通过removeLayoutComponent方法通知布局管理器从此容器的布局中删除组件。

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

      参见:
    • getLayout

      public LayoutManager getLayout()
      获取此容器的布局管理器。
      返回:
      此容器的当前布局管理器
      参见:
    • setLayout

      public void setLayout(LayoutManager mgr)
      为此容器设置布局管理器。

      此方法更改与布局相关的信息,因此使组件层次结构无效。

      参数:
      mgr - 指定的布局管理器
      参见:
    • doLayout

      public void doLayout()
      使此容器布局其组件。大多数程序不应直接调用此方法,而应该调用validate方法。
      覆盖:
      doLayout 在类 Component
      自从:
      1.1
      参见:
    • layout

      @Deprecated public void layout()
      Deprecated.
      As of JDK version 1.1, replaced by doLayout().
      覆盖:
      layout 在类 Component
    • isValidateRoot

      public boolean isValidateRoot()
      表示此容器是否为验证根

      与验证根后代的边界等布局相关更改不会影响验证根父级的布局。这种特殊性使得invalidate()方法在遇到验证根时停止使组件层次结构无效。然而,为了保持向后兼容性,只有当java.awt.smartInvalidate系统属性值设置为true时,才启用这种新的优化行为。

      如果组件层次结构包含验证根,并且启用了新的优化invalidate()行为,则必须在先前使组件无效的验证根上调用validate()方法,以便稍后恢复层次结构的有效性。否则,应该在顶级容器(如Frame对象)上调用validate()方法来恢复组件层次结构的有效性。

      Window类和Applet类是AWT中的验证根。Swing引入了更多的验证根。

      返回:
      此容器是否为验证根
      自:
      1.7
      另请参见:
    • invalidate

      public void invalidate()
      使容器无效。

      如果安装在此容器上的LayoutManagerLayoutManager2接口的实例,则会在其上调用LayoutManager2.invalidateLayout(Container)方法,并将此Container作为参数传递。

      然后,此方法标记此容器为无效,并使其祖先无效。有关更多详细信息,请参阅Component.invalidate()方法。

      覆盖:
      invalidate 在类中 Component
      另请参见:
    • validate

      public void validate()
      验证此容器及其所有子组件。

      验证容器意味着布局其子组件。布局相关更改,例如设置组件的边界或将组件添加到容器中,会自动使容器无效。请注意,容器的祖先也可能被使无效(请参阅Component.invalidate()以获取详细信息)。因此,为了恢复层次结构的有效性,应在层次结构中顶部的无效容器上调用validate()方法。

      验证容器可能是一个耗时的操作。出于性能原因,开发人员可以推迟对层次结构的验证,直到一组与布局相关的操作完成,例如在将所有子项添加到容器后。

      如果此Container无效,则此方法调用validateTree方法,并将此Container标记为有效。否则,不执行任何操作。

      覆盖:
      validate 在类中 Component
      另请参见:
    • validateTree

      protected void validateTree()
      递归地遍历容器树,并为标记为需要的任何子树(标记为无效)重新计算布局。调用此方法的方法应提供同步:validate
      另请参见:
    • setFont

      public void setFont(Font f)
      设置此容器的字体。

      此方法更改与布局相关的信息,因此会使组件层次结构无效。

      覆盖:
      setFont 在类中 Component
      参数:
      f - 要成为此容器字体的字体。
      自:
      1.0
      另请参见:
    • getPreferredSize

      public Dimension getPreferredSize()
      返回此容器的首选大小。如果首选大小未由Component.setPreferredSize(Dimension)显式设置,并且此Container具有非nullLayoutManager,则使用LayoutManager.preferredLayoutSize(Container)来计算首选大小。

      注意:一些实现可能会缓存从LayoutManager返回的值。缓存的实现不需要在每次调用此方法时调用LayoutManager.preferredLayoutSize,而只有在Container变为无效后才会查询LayoutManager

      覆盖:
      getPreferredSize 在类中 Component
      返回:
      代表此容器首选大小的Dimension实例。
      另请参见:
    • preferredSize

      @Deprecated public Dimension preferredSize()
      Deprecated.
      As of JDK version 1.1, replaced by getPreferredSize().
      从类中复制的描述: Component
      返回组件的首选大小。
      覆盖:
      preferredSize 在类中 Component
      返回:
      组件的首选大小
    • getMinimumSize

      public Dimension getMinimumSize()
      返回此容器的最小大小。如果最小大小未由Component.setMinimumSize(Dimension)显式设置,并且此Container具有非nullLayoutManager,则使用LayoutManager.minimumLayoutSize(Container)来计算最小大小。

      注意:一些实现可能会缓存从LayoutManager返回的值。缓存的实现不需要在每次调用此方法时调用minimumLayoutSize,而只有在Container变为无效后才会查询LayoutManager

      覆盖:
      getMinimumSize 在类中 Component
      返回:
      代表此容器最小大小的Dimension实例。
      自:
      1.1
      另请参见:
    • minimumSize

      @Deprecated public Dimension minimumSize()
      Deprecated.
      As of JDK version 1.1, replaced by getMinimumSize().
      从类中复制的描述: Component
      返回此组件的最小大小。
      覆盖:
      minimumSize 在类中 Component
      返回:
      此组件的最小大小
    • getMaximumSize

      public Dimension getMaximumSize()
      返回此容器的最大大小。如果最大大小未由Component.setMaximumSize(Dimension)显式设置,并且安装在此Container上的LayoutManagerLayoutManager2接口的实例,则使用LayoutManager2.maximumLayoutSize(Container)来计算最大大小。

      注意:一些实现可能会缓存从LayoutManager2返回的值。缓存的实现不需要在每次调用此方法时调用maximumLayoutSize,而只有在Container变为无效后才会查询LayoutManager2

      覆盖:
      getMaximumSize 在类 Component
      返回:
      一个代表此容器最大尺寸的Dimension实例。
      参见:
    • getAlignmentX

      public float getAlignmentX()
      返回沿x轴的对齐方式。这指定组件希望相对于其他组件对齐的方式。该值应为介于0和1之间的数字,其中0表示沿原点对齐,1表示与原点最远对齐,0.5表示居中,依此类推。
      覆盖:
      getAlignmentX 在类 Component
      返回:
      此组件的水平对齐方式
    • getAlignmentY

      public float getAlignmentY()
      返回沿y轴的对齐方式。这指定组件希望相对于其他组件对齐的方式。该值应为介于0和1之间的数字,其中0表示沿原点对齐,1表示与原点最远对齐,0.5表示居中,依此类推。
      覆盖:
      getAlignmentY 在类 Component
      返回:
      此组件的垂直对齐方式
    • paint

      public void paint(Graphics g)
      绘制容器。这将将绘图转发给此容器的任何轻量级组件。如果重新实现此方法,则应调用super.paint(g),以便正确呈现轻量级组件。如果子组件完全被g中当前的裁剪设置剪切,将不会将paint()转发给该子组件。
      覆盖:
      paint 在类 Component
      参数:
      g - 指定的Graphics窗口
      参见:
    • update

      public void update(Graphics g)
      更新容器。这将将更新转发给此容器的任何轻量级组件。如果重新实现此方法,则应调用super.update(g),以便正确呈现轻量级组件。如果子组件完全被g中当前的裁剪设置剪切,将不会将update()转发给该子组件。
      覆盖:
      update 在类 Component
      参数:
      g - 指定的Graphics窗口
      参见:
    • print

      public void print(Graphics g)
      打印容器。这将将打印转发给此容器的任何轻量级组件。如果重新实现此方法,则应调用super.print(g),以便正确呈现轻量级组件。如果子组件完全被g中当前的裁剪设置剪切,将不会将print()转发给该子组件。
      覆盖:
      print 在类 Component
      参数:
      g - 指定的Graphics窗口
      参见:
    • paintComponents

      public void paintComponents(Graphics g)
      绘制此容器中的每个组件。
      参数:
      g - 图形上下文。
      参见:
    • printComponents

      public void printComponents(Graphics g)
      打印此容器中的每个组件。
      参数:
      g - 图形上下文。
      参见:
    • addContainerListener

      public void addContainerListener(ContainerListener l)
      将指定的容器监听器添加到此容器以接收来自此容器的容器事件。如果l为null,则不会抛出异常且不执行任何操作。

      有关AWT线程模型的详细信息,请参阅AWT线程问题

      参数:
      l - 容器监听器
      参见:
    • removeContainerListener

      public void removeContainerListener(ContainerListener l)
      删除指定的容器监听器,使其不再从此容器接收容器事件。如果l为null,则不会抛出异常且不执行任何操作。

      有关AWT线程模型的详细信息,请参阅AWT线程问题

      参数:
      l - 容器监听器
      参见:
    • getContainerListeners

      public ContainerListener[] getContainerListeners()
      返回在此容器上注册的所有容器监听器的数组。
      返回:
      所有此容器的ContainerListener或如果当前未注册容器监听器,则返回空数组
      自:
      1.4
      参见:
    • getListeners

      public <T extends EventListener> T[] getListeners(Class<T> listenerType)
      返回当前在此Container上注册为FooListener的所有对象的数组。使用addFooListener方法注册FooListener

      您可以使用类文字指定listenerType参数,例如FooListener.class。例如,您可以使用以下代码查询Container c的容器监听器:

      ContainerListener[] cls = (ContainerListener[])(c.getListeners(ContainerListener.class));
      如果不存在此类监听器,则此方法将返回一个空数组。
      覆盖:
      getListeners 在类 Component
      类型参数:
      T - 监听器的类型
      参数:
      listenerType - 请求的监听器类型;此参数应指定从java.util.EventListener继承的接口
      返回:
      在此容器上注册为FooListener的所有对象的数组,如果尚未添加此类监听器,则返回空数组
      抛出:
      ClassCastException - 如果listenerType未指定实现java.util.EventListener的类或接口
      NullPointerException - 如果listenerTypenull
      自:
      1.3
      参见:
    • processEvent

      protected void processEvent(AWTEvent e)
      处理此容器上的事件。如果事件是ContainerEvent,则调用processContainerEvent方法,否则调用其超类的processEvent

      请注意,如果事件参数为null,则行为是未指定的,可能会导致异常。

      覆盖:
      processEvent 在类 Component
      参数:
      e - 事件
      参见:
    • processContainerEvent

      protected void processContainerEvent(ContainerEvent e)
      通过将容器事件分派给任何已注册的ContainerListener对象来处理发生在此容器上的容器事件。注意:除非为此组件启用了容器事件,否则不会调用此方法;当发生以下情况之一时会启用容器事件:
      • 通过addContainerListener注册了ContainerListener对象
      • 通过enableEvents启用了容器事件

      请注意,如果事件参数为null,则行为是未指定的,可能会导致异常。

      参数:
      e - 容器事件
      参见:
    • deliverEvent

      @Deprecated public void deliverEvent(Event e)
      Deprecated.
      As of JDK version 1.1, replaced by dispatchEvent(AWTEvent e)
      覆盖:
      deliverEvent 在类 Component
      参数:
      e - 要传递的事件
    • getComponentAt

      public Component getComponentAt(int x, int y)
      定位包含x、y位置的组件。在组件重叠的情况下,返回最顶层的子组件。这是通过找到在索引0处最接近给定点的组件来确定的,该组件通过Component.contains()声明包含给定点,但具有本机对等体的组件优先于没有本机对等体的组件(即轻量级组件)。
      覆盖:
      getComponentAt 在类 Component
      参数:
      x - x坐标
      y - y坐标
      返回:
      如果组件不包含该位置,则返回null。如果请求点处没有子组件且该点在容器的边界内,则返回容器本身;否则返回最顶层的子组件。
      自从:
      1.1
      参见:
    • locate

      @Deprecated public Component locate(int x, int y)
      Deprecated.
      As of JDK version 1.1, replaced by getComponentAt(int, int).
      从类中复制的描述: Component
      返回指定位置的鼠标指针在此Container的坐标空间中的位置,如果Container在鼠标指针下,则返回null。此方法类似于Component.getMousePosition(),但它可以考虑Container的子组件。如果allowChildrenfalse,则此方法仅在鼠标指针直接位于Container上方时返回非null值,而不是位于被子组件遮挡的部分上方。如果allowChildrentrue,则此方法在鼠标指针位于Container或其任何后代上方时返回非null值。
      参数:
      allowChildren - 如果应考虑子组件
      返回:
      相对于此Component的鼠标坐标,或null
      抛出:
      HeadlessException - 如果GraphicsEnvironment.isHeadless()返回true
      自从:
      1.5
      参见:
    • getComponentAt

      public Component getComponentAt(Point p)
      获取包含指定点的组件。
      覆盖:
      getComponentAt 在类 Component
      参数:
      p - 点。
      返回:
      返回包含该点的组件,如果组件不包含该点,则返回null
      自从:
      1.1
      参见:
    • getMousePosition

      public Point getMousePosition(boolean allowChildren) throws HeadlessException
      返回此Container的坐标空间中鼠标指针的位置,如果Container在鼠标指针下,则返回null。此方法类似于Component.getMousePosition(),但它可以考虑Container的子组件。如果allowChildrenfalse,则此方法仅在鼠标指针直接位于Container上方时返回非null值,而不是位于被子组件遮挡的部分上方。如果allowChildrentrue,则此方法在鼠标指针位于Container或其任何后代上方时返回非null值。
      参数:
      allowChildren - 如果应考虑子组件
      返回:
      相对于此Component的鼠标坐标,或null
      抛出:
      HeadlessException - 如果GraphicsEnvironment.isHeadless()返回true
      自从:
      1.5
      参见:
    • findComponentAt

      public Component findComponentAt(int x, int y)
      定位包含指定位置的可见子组件。在组件重叠的情况下,返回最顶层的子组件。如果包含子组件是一个Container,则此方法将继续搜索最深层嵌套的子组件。在搜索期间将忽略不可见的组件。

      findComponentAt方法与getComponentAt不同之处在于getComponentAt仅搜索Container的直接子组件;如果包含组件是一个Container,则findComponentAt将搜索该子组件以查找嵌套组件。

      参数:
      x - x坐标
      y - y坐标
      返回:
      如果组件不包含该位置,则返回null。如果请求点处没有子组件且该点在容器的边界内,则返回容器本身。
      自从:
      1.2
      参见:
    • findComponentAt

      public Component findComponentAt(Point p)
      定位包含指定点的可见子组件。在组件重叠的情况下,返回最顶层的子组件。如果包含子组件是一个Container,则此方法将继续搜索最深层嵌套的子组件。在搜索期间将忽略不可见的组件。

      findComponentAt方法与getComponentAt不同之处在于getComponentAt仅搜索Container的直接子组件;如果包含组件是一个Container,则findComponentAt将搜索该子组件以查找嵌套组件。

      参数:
      p - 点。
      返回:
      如果组件不包含该位置,则返回null。如果请求点处没有子组件且该点在容器的边界内,则返回容器本身。
      抛出:
      NullPointerException - 如果pnull
      自从:
      1.2
      参见:
    • addNotify

      public void addNotify()
      通过将其连接到本机屏幕资源使此Container可显示。使容器可显示将导致其所有子组件都可显示。此方法由工具包内部调用,不应由程序直接调用。
      覆盖:
      addNotify 在类 Component
      参见:
    • removeNotify

      public void removeNotify()
      通过删除与本机屏幕资源的连接使此Container不可显示。使容器不可显示将导致其所有子组件都不可显示。此方法由工具包内部调用,不应由程序直接调用。
      覆盖:
      removeNotify 在类 Component
      参见:
    • isAncestorOf

      public boolean isAncestorOf(Component c)
      检查组件是否包含在此容器的组件层次结构中。
      参数:
      c - 组件
      返回:
      true 如果它是祖先;否则为false
      自版本:
      1.1
    • paramString

      protected String paramString()
      返回表示此Container状态的字符串。此方法仅用于调试目的,返回的字符串的内容和格式可能因实现而异。返回的字符串可能为空,但不会是null
      覆盖:
      paramString 在类 Component
      返回:
      此容器的参数字符串
    • list

      public void list(PrintStream out, int indent)
      将此容器的列表打印到指定的输出流。列表从指定的缩进开始。

      容器的直接子项将以indent+1的缩进打印。这些子项的子项将以indent+2打印,依此类推。

      覆盖:
      list 在类 Component
      参数:
      out - 打印流
      indent - 缩进的空格数
      抛出:
      NullPointerException - 如果outnull
      自版本:
      1.0
      参见:
    • list

      public void list(PrintWriter out, int indent)
      打印列表,从指定的缩进开始,到指定的打印写入器。

      容器的直接子项将以indent+1的缩进打印。这些子项的子项将以indent+2打印,依此类推。

      覆盖:
      list 在类 Component
      参数:
      out - 打印写入器
      indent - 缩进的空格数
      抛出:
      NullPointerException - 如果outnull
      自版本:
      1.1
      参见:
    • setFocusTraversalKeys

      public void setFocusTraversalKeys(int id, Set<? extends AWTKeyStroke> keystrokes)
      为此容器设置给定遍历操作的焦点遍历键。

      容器的焦点遍历键的默认值取决于实现。Sun建议特定本机平台的所有实现使用相同的默认值。Windows和Unix的建议如下。这些建议在Sun AWT实现中使用。

      容器焦点遍历键的推荐默认值
      标识符 含义 默认值
      KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS 正常前向键盘遍历 按下TAB,按下CTRL-TAB
      KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS 正常反向键盘遍历 按下SHIFT-TAB,按下CTRL-SHIFT-TAB
      KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS 向上一个焦点遍历循环
      KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS 向下一个焦点遍历循环
      要禁用遍历键,请使用空集合;建议使用Collections.EMPTY_SET。

      使用AWTKeyStroke API,客户端代码可以指定焦点遍历操作将在两个特定KeyEvents中的哪一个上发生,即KEY_PRESSED或KEY_RELEASED。但是,无论指定哪个KeyEvent,与焦点遍历键相关的所有KeyEvents,包括关联的KEY_TYPED事件,都将被消耗,并且不会被分派到任何容器。将KEY_TYPED事件映射到焦点遍历操作,或将同一事件映射到此容器的多个默认焦点遍历操作是运行时错误。

      如果为Set指定了null值,则此容器将从其父级继承Set。如果此容器的所有祖先都为null,则使用当前KeyboardFocusManager的默认Set。

      如果keystrokes中的任何Object不是AWTKeyStroke,此方法可能会抛出ClassCastException

      覆盖:
      setFocusTraversalKeys 在类 Component
      参数:
      id - KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一
      keystrokes - 指定操作的AWTKeyStroke集合
      抛出:
      IllegalArgumentException - 如果id不是KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一,或者如果keystrokes包含null,或者如果任何keystroke表示KEY_TYPED事件,或者如果任何keystroke已经映射到此容器的另一个焦点遍历操作
      自版本:
      1.4
      参见:
    • getFocusTraversalKeys

      public Set<AWTKeyStroke> getFocusTraversalKeys(int id)
      返回此容器的给定遍历操作的焦点遍历键集合。(有关每个键的完整描述,请参阅setFocusTraversalKeys。)

      如果未为此容器明确定义遍历键集合,则返回此容器的父级的集合。如果未为此容器的任何祖先明确定义集合,则返回当前KeyboardFocusManager的默认集合。

      覆盖:
      getFocusTraversalKeys 在类 Component
      参数:
      id - KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一
      返回:
      指定操作的AWTKeyStrokes集合。该集合是不可修改的,可能为空。不会返回null。
      抛出:
      IllegalArgumentException - 如果id不是KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一
      自版本:
      1.4
      参见:
    • areFocusTraversalKeysSet

      public boolean areFocusTraversalKeysSet(int id)
      返回给定焦点遍历操作的焦点遍历键集合是否已为此容器明确定义。如果此方法返回false,则此容器正在从祖先或当前KeyboardFocusManager继承集合。
      覆盖:
      areFocusTraversalKeysSet 在类 Component
      参数:
      id - KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一
      返回:
      true 如果给定焦点遍历操作的焦点遍历键集合已为此组件明确定义;否则为false
      抛出:
      IllegalArgumentException - 如果id不是KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一
      自版本:
      1.4
    • isFocusCycleRoot

      public boolean isFocusCycleRoot(Container container)
      返回指定的容器是否是此容器焦点遍历循环的焦点循环根。每个焦点遍历循环只有一个焦点循环根,每个不是焦点循环根的容器只属于一个焦点遍历循环。作为焦点循环根的容器属于两个循环:一个根在容器本身,另一个根在容器的最近焦点循环根祖先。在这种情况下,此方法将为这两个容器返回true
      覆盖:
      isFocusCycleRoot 在类 Component
      参数:
      container - 要测试的容器
      返回:
      如果指定的容器是此容器的焦点循环根,则返回true;否则返回false
      自从:
      1.4
      参见:
    • setFocusTraversalPolicy

      public void setFocusTraversalPolicy(FocusTraversalPolicy policy)
      设置将管理此容器子级键盘遍历的焦点遍历策略,如果此容器是焦点循环根。如果参数为null,则此容器从其焦点循环根祖先继承其策略。如果参数为非null,则此策略将被所有没有自己的键盘遍历策略的焦点循环根子级(以及递归地,它们的焦点循环根子级)继承。

      如果此容器不是焦点循环根,则策略将被记住,但直到此容器被设置为焦点循环根之前,它将不会被此容器或任何其他容器使用或继承。

      参数:
      policy - 此容器的新焦点遍历策略
      自从:
      1.4
      参见:
    • getFocusTraversalPolicy

      public FocusTraversalPolicy getFocusTraversalPolicy()
      返回将管理此容器子级键盘遍历的焦点遍历策略,如果此容器不是焦点循环根,则返回null。如果未为此容器明确设置遍历策略,则返回此容器的焦点循环根祖先的策略。
      返回:
      此容器的焦点遍历策略,如果此容器不是焦点循环根,则返回null。
      自从:
      1.4
      参见:
    • isFocusTraversalPolicySet

      public boolean isFocusTraversalPolicySet()
      返回是否已为此容器明确设置焦点遍历策略。如果此方法返回false,则此容器将从祖先继承其焦点遍历策略。
      返回:
      如果已为此容器明确设置焦点遍历策略,则返回true;否则返回false
      自从:
      1.4
    • setFocusCycleRoot

      public void setFocusCycleRoot(boolean focusCycleRoot)
      设置此容器是否为焦点遍历循环的根。一旦焦点进入遍历循环,通常情况下,除非按下上下遍历键之一,否则无法通过焦点遍历离开。正常遍历仅限于此容器及其所有不是下级焦点循环根的下级。请注意,焦点遍历策略可能会弯曲这些限制。例如,ContainerOrderFocusTraversalPolicy支持隐式下级遍历。

      指定此容器子级遍历顺序的另一种方法是将此容器设置为焦点遍历策略提供者

      参数:
      focusCycleRoot - 指示此容器是否为焦点遍历循环的根
      自从:
      1.4
      参见:
    • isFocusCycleRoot

      public boolean isFocusCycleRoot()
      返回此容器是否为焦点遍历循环的根。一旦焦点进入遍历循环,通常情况下,除非按下上下遍历键之一,否则无法通过焦点遍历离开。正常遍历仅限于此容器及其所有不是下级焦点循环根的下级。请注意,焦点遍历策略可能会弯曲这些限制。例如,ContainerOrderFocusTraversalPolicy支持隐式下级遍历。
      返回:
      此容器是否为焦点遍历循环的根
      自从:
      1.4
      参见:
    • setFocusTraversalPolicyProvider

      public final void setFocusTraversalPolicyProvider(boolean provider)
      设置此容器是否用于提供焦点遍历策略。具有此属性为true的容器将用于获取焦点遍历策略,而不是最近的焦点循环根祖先。
      参数:
      provider - 指示此容器是否用于提供焦点遍历策略
      自从:
      1.5
      参见:
    • isFocusTraversalPolicyProvider

      public final boolean isFocusTraversalPolicyProvider()
      返回此容器是否提供焦点遍历策略。如果此属性设置为true,则当键盘焦点管理器搜索容器层次结构以获取焦点遍历策略并在遇到此容器之前没有任何其他具有此属性为true或焦点循环根的容器时,则将使用其焦点遍历策略,而不是焦点循环根的策略。
      返回:
      如果此容器提供焦点遍历策略,则返回true;否则返回false
      自从:
      1.5
      参见:
    • transferFocusDownCycle

      public void transferFocusDownCycle()
      将焦点传输到下一个焦点遍历循环。如果此容器是焦点循环根,则焦点所有者设置为此容器的默认焦点组件,并且当前焦点循环根设置为此容器。如果此容器不是焦点循环根,则不会发生焦点遍历操作。
      自从:
      1.4
      参见:
    • applyComponentOrientation

      public void applyComponentOrientation(ComponentOrientation o)
      设置此容器及其所有包含的组件的ComponentOrientation属性。

      此方法更改与布局相关的信息,因此会使组件层次结构无效。

      覆盖:
      applyComponentOrientation 在类 Component
      参数:
      o - 此容器及其包含的组件的新组件方向
      抛出:
      NullPointerException - 如果orientation为null
      自从:
      1.4
      参见:
    • addPropertyChangeListener

      public void addPropertyChangeListener(PropertyChangeListener listener)
      向监听器列表添加PropertyChangeListener。该监听器为此类的所有绑定属性注册,包括以下内容:
      • 此容器的字体("font")
      • 此容器的背景颜色("background")
      • 此容器的前景颜色("foreground")
      • 此容器的可聚焦性("focusable")
      • 此容器的焦点遍历键启用状态("focusTraversalKeysEnabled")
      • 此容器的FORWARD_TRAVERSAL_KEYS集合("forwardFocusTraversalKeys")
      • 此容器的BACKWARD_TRAVERSAL_KEYS集合("backwardFocusTraversalKeys")
      • 此容器的UP_CYCLE_TRAVERSAL_KEYS集合("upCycleFocusTraversalKeys")
      • 此容器的DOWN_CYCLE_TRAVERSAL_KEYS集合("downCycleFocusTraversalKeys")
      • 此容器的焦点遍历策略("focusTraversalPolicy")
      • 此容器的焦点循环根状态("focusCycleRoot")
      请注意,如果此容器继承了绑定属性,则不会对继承的属性的更改触发事件。

      如果监听器为null,则不会抛出异常,也不会执行任何操作。

      覆盖:
      addPropertyChangeListener 在类 Component
      参数:
      listener - 要添加的PropertyChangeListener
      参见:
    • addPropertyChangeListener

      public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
      向特定属性的监听器列表中添加PropertyChangeListener。指定的属性可以是用户定义的,也可以是以下默认属性之一:
      • 此容器的字体("font")
      • 此容器的背景颜色("background")
      • 此容器的前景颜色("foreground")
      • 此容器的可聚焦性("focusable")
      • 此容器的焦点遍历键启用状态("focusTraversalKeysEnabled")
      • 此容器的FORWARD_TRAVERSAL_KEYS集合("forwardFocusTraversalKeys")
      • 此容器的BACKWARD_TRAVERSAL_KEYS集合("backwardFocusTraversalKeys")
      • 此容器的UP_CYCLE_TRAVERSAL_KEYS集合("upCycleFocusTraversalKeys")
      • 此容器的DOWN_CYCLE_TRAVERSAL_KEYS集合("downCycleFocusTraversalKeys")
      • 此容器的焦点遍历策略("focusTraversalPolicy")
      • 此容器的焦点循环根状态("focusCycleRoot")
      • 此容器的焦点遍历策略提供程序状态("focusTraversalPolicyProvider")
      • 此容器的焦点遍历策略提供程序状态("focusTraversalPolicyProvider")
      请注意,如果此容器继承了一个绑定属性,则对继承属性的更改不会触发任何事件。

      如果listener为null,则不会抛出异常,也不会执行任何操作。

      覆盖:
      addPropertyChangeListener 在类 Component
      参数:
      propertyName - 上述属性名称之一
      listener - 要添加的PropertyChangeListener
      参见: