Module  java.desktop
软件包  javax.swing

Class JRootPane

  • All Implemented Interfaces:
    ImageObserverMenuContainerSerializableAccessible


    public class JRootPane
    extends JComponent
    implements Accessible
    通过在后台使用一个轻量级容器JFrameJDialogJWindowJApplet ,并JInternalFrame 有关根窗格提供的功能的面向任务的信息,请参阅“Java教程”中的 How to Use Root Panes ”一节。

    以下图像显示了使用根窗格的类之间的关系。

    以下文字描述了此图形。

    “重量级”组件(委托给对等体或主机系统上的本机组件)的组件显示为较暗较重的组件。 四个重量级JFC / Swing容器( JFrameJDialogJWindow ,和JApplet )被示出相对于它们扩展AWT类。 这四个组件是Swing库中唯一重量级的容器。 还示出了轻量级容器JInternalFrame 所有这五个JFC / Swing容器都实现了RootPaneContainer接口,他们都将其操作委托给一个JRootPane (顶部有一个“句柄”)。
    Note: The JComponent method getRootPane can be used to obtain the JRootPane that contains a given component.
    Example The following text describes this graphic.
    右图显示了一个JRootPane的结构。 A JRootpaneglassPane ,可选的menuBarcontentPane JLayeredPane管理menuBarcontentPaneglassPane坐在所有的顶部,它可以拦截鼠标移动。 由于glassPane (像contentPane )可以是任意组件,也可以设置glassPane进行绘图。 然后, glassPane上的线条和图像可以在下方的框架之间,而不受其边界的限制。

    虽然menuBar组件是可选的,在layeredPanecontentPane ,并glassPane始终存在。 尝试将其设置为null生成异常。

    要将组件添加到JRootPane (可选菜单栏除外),您将对象添加到contentPane中的JRootPane ,如下所示:

      rootPane.getContentPane().add(child); 
    设置布局管理器,删除组件,列出子项等同样的原则。所有这些方法都在contentPane而不是JRootPaneJRootPane
    Note: The default layout manager for the contentPane is a BorderLayout manager. However, the JRootPane uses a custom LayoutManager. So, when you want to change the layout manager for the components you added to a JRootPane, be sure to use code like this:
        rootPane.getContentPane().setLayout(new BoxLayout());
     
    如果JMenuBar部件被设定在JRootPane ,其沿着所述框架的上边缘定位。 contentPane位置和大小进行了调整,以填补剩余的面积。 (该JMenuBarcontentPane被添加到layeredPane在组件JLayeredPane.FRAME_CONTENT_LAYER层)。

    layeredPane是在所有儿童的家长JRootPane -既是菜单的直接父和所有组件的祖父加入contentPane 它是一个JLayeredPane的实例,它提供了在多个层中添加组件的能力。 使用菜单弹出窗口,对话框和拖动时,此功能非常有用,您需要将组件放置在窗格中所有其他组件的顶部。

    glassPane位于glassPane中所有其他组件的JRootPane 这提供了一个方便的地方来绘制所有其他组件,并且可以拦截鼠标事件,这对拖动和绘图都是有用的。 开发人员可以使用setVisibleglassPane上控制glassPane显示其他孩子。 默认情况下, glassPane不可见。

    自定义LayoutManager通过使用JRootPane确保:

    1. glassPane填充了JRootPane (边界 - 插图)的整个可见区域。
    2. layeredPane充满整个可视区域JRootPane (边界 - 插图)
    3. 所述menuBar位于的上边缘layeredPane
    4. contentPane填写整个可见区域,减去menuBar (如果存在)。
    JRootPane视图层次结构中的任何其他视图将被忽略。

    如果您更换LayoutManagerJRootPane ,则负责管理所有这些视图。 所以通常你会想确保你更改了contentPane而不是JRootPane本身的布局管理器!

    Swing的绘画架构需要一个不透明的JComponent存在于所有其他组件的包含层次结构中。 这通常通过内容窗格提供。 如果替换内容窗格,建议您通过setOpaque(true)使内容窗格不透明。 另外,如果内容窗格覆盖paintComponent ,则需要在paintComponent完全填充不透明颜色的背景。

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

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

    从以下版本开始:
    1.2
    另请参见:
    JLayeredPaneJMenuBarJWindowJFrameJDialogJAppletJInternalFrameJComponentBoxLayoutMixing Heavy and Light ComponentsSerialized Form
    • 字段详细信息

      • NONE

        public static final int NONE
        用于windowDecorationStyle属性的常量。 表示JRootPane不应提供任何类型的窗口装饰。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • FRAME

        public static final int FRAME
        用于windowDecorationStyle属性的常量。 表示JRootPane应提供适用于框架的装饰。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • PLAIN_DIALOG

        public static final int PLAIN_DIALOG
        用于windowDecorationStyle属性的常量。 表示JRootPane应提供适合于Dialog的装饰。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • INFORMATION_DIALOG

        public static final int INFORMATION_DIALOG
        用于windowDecorationStyle属性的常量。 表示JRootPane应提供适用于显示信息性消息的Dialog的装饰。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • ERROR_DIALOG

        public static final int ERROR_DIALOG
        用于windowDecorationStyle属性的常量。 表示JRootPane应提供适用于显示错误消息的Dialog的装饰。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • COLOR_CHOOSER_DIALOG

        public static final int COLOR_CHOOSER_DIALOG
        用于windowDecorationStyle属性的常量。 表示JRootPane应提供适用于显示JColorChooser的Dialog的JColorChooser
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • FILE_CHOOSER_DIALOG

        public static final int FILE_CHOOSER_DIALOG
        用于windowDecorationStyle属性的常量。 表示JRootPane应提供适用于显示JFileChooser的Dialog的JFileChooser
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • QUESTION_DIALOG

        public static final int QUESTION_DIALOG
        用于windowDecorationStyle属性的常量。 表示JRootPane应提供适合用于向用户呈现问题的Dialog的装饰。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • WARNING_DIALOG

        public static final int WARNING_DIALOG
        用于windowDecorationStyle属性的常量。 表示JRootPane应提供适用于显示警告消息的Dialog的装饰。
        从以下版本开始:
        1.4
        另请参见:
        Constant Field Values
      • menuBar

        protected JMenuBar menuBar
        菜单栏。
      • contentPane

        protected Container contentPane
        内容窗格。
      • layeredPane

        protected JLayeredPane layeredPane
        管理菜单栏和内容窗格的分层窗格。
      • glassPane

        protected Component glassPane
        玻璃窗格覆盖菜单栏和内容窗格,因此可以拦截鼠标移动等。
      • defaultButton

        protected JButton defaultButton
        当窗格具有焦点并且出现特定于UI的操作(如按 Enter键)时,该按钮将被激活。
    • 构造方法详细信息

      • JRootPane

        public JRootPane​()
        创建 JRootPane ,建立其 glassPanelayeredPane ,并 contentPane
    • 方法详细信息

      • setDoubleBuffered

        public void setDoubleBuffered​(boolean aFlag)
        设置此组件是否应该使用缓冲区来绘制。 如果设置为true,则此组件的所有绘图将在屏幕外绘图缓冲区中完成。 屏幕上的绘画缓冲区将被复制到屏幕上。 如果一个Component是缓冲的,并且其祖先之一也被缓冲,那么将使用祖先缓冲区。
        重写:
        setDoubleBufferedJComponent
        参数
        aFlag - 如果为true,请将此组件设置为双缓冲
        从以下版本开始:
        1.6
      • getWindowDecorationStyle

        public int getWindowDecorationStyle​()
        返回一个常数,用于标识 JRootPane提供的窗口装饰类型。
        结果
        一个 NONEFRAMEPLAIN_DIALOGINFORMATION_DIALOGERROR_DIALOGCOLOR_CHOOSER_DIALOGFILE_CHOOSER_DIALOGQUESTION_DIALOG或者 WARNING_DIALOG
        从以下版本开始:
        1.4
        另请参见:
        setWindowDecorationStyle(int)
      • setWindowDecorationStyle

        @BeanProperty(expert=true,
                      visualUpdate=true,
                      enumerationValues={"JRootPane.NONE","JRootPane.FRAME","JRootPane.PLAIN_DIALOG","JRootPane.INFORMATION_DIALOG","JRootPane.ERROR_DIALOG","JRootPane.COLOR_CHOOSER_DIALOG","JRootPane.FILE_CHOOSER_DIALOG","JRootPane.QUESTION_DIALOG","JRootPane.WARNING_DIALOG"},
                      description="Identifies the type of Window decorations to provide")
        public void setWindowDecorationStyle​(int windowDecorationStyle)
        设置JRootPane应提供的窗口装饰类型(如边框,关闭窗口的小部件,标题...)。 默认是不提供窗口装饰( NONE )。

        这只是一个提示,一些看起来和感觉可能不支持这一点。 这是一个绑定属性。

        参数
        windowDecorationStyle - windowDecorationStyle识别提供的窗口装饰。
        异常
        IllegalArgumentException -如果 style不是一个: NONEFRAMEPLAIN_DIALOGINFORMATION_DIALOGERROR_DIALOGCOLOR_CHOOSER_DIALOGFILE_CHOOSER_DIALOGQUESTION_DIALOG ,或 WARNING_DIALOG
        从以下版本开始:
        1.4
        另请参见:
        JDialog.setDefaultLookAndFeelDecorated(boolean)JFrame.setDefaultLookAndFeelDecorated(boolean)LookAndFeel.getSupportsWindowDecorations()
      • getUI

        public RootPaneUI getUI​()
        返回渲染此组件的L&F对象。
        重写:
        getUIJComponent
        结果
        LabelUI对象
        从以下版本开始:
        1.3
      • createLayeredPane

        protected JLayeredPane createLayeredPane​()
        由构造函数调用方法创建默认的layeredPane Bt默认它创建一个新的JLayeredPane
        结果
        默认为 layeredPane
      • createContentPane

        protected Container createContentPane​()
        由构造函数调用方法创建默认的contentPane 默认情况下,此方法创建一个新的JComponent添加集BorderLayout作为其LayoutManager
        结果
        默认为 contentPane
      • createGlassPane

        protected Component createGlassPane​()
        由构造函数调用方法创建默认的glassPane 默认情况下,此方法创建一个新的JComponent ,其可见性设置为false。
        结果
        默认为 glassPane
      • createRootLayout

        protected LayoutManager createRootLayout​()
        由构造函数调用方法创建默认的 layoutManager
        结果
        默认为 layoutManager
      • setJMenuBar

        public void setJMenuBar​(JMenuBar menu)
        添加或更改分层窗格中使用的菜单栏。
        参数
        menu - 要添加的 JMenuBar
      • setMenuBar

        @Deprecated
        public void setMenuBar​(JMenuBar menu)
        已过时。 从Swing版本1.0.3替换为setJMenuBar(JMenuBar menu)
        指定菜单栏值。
        参数
        menu - 要添加的 JMenuBar
      • getJMenuBar

        public JMenuBar getJMenuBar​()
        从分层窗格返回菜单栏。
        结果
        在窗格中使用的 JMenuBar
      • getMenuBar

        @Deprecated
        public JMenuBar getMenuBar​()
        已过时。 从Swing版本1.0.3替换为getJMenuBar()
        返回菜单栏值。
        结果
        在窗格中使用的 JMenuBar
      • setContentPane

        public void setContentPane​(Container content)
        设置内容窗格 - 保存由根窗格加载的组件的容器。

        Swing的绘画架构在遏制层次结构中需要一个不透明的JComponent 这通常由内容窗格提供。 如果您更换内容窗格,建议您将其替换为不透明的JComponent

        参数
        content - 用于组件内容的 Container
        异常
        IllegalComponentStateException - (运行时异常)如果内容窗格参数是 null
      • getContentPane

        public Container getContentPane​()
        返回内容窗格 - 保存由根窗格父化的组件的容器。
        结果
        保存组件内容的 Container
      • setLayeredPane

        public void setLayeredPane​(JLayeredPane layered)
        设置根窗格的分层窗格。 分层窗格通常保存内容窗格和可选的JMenuBar
        参数
        layered - 要使用的 JLayeredPane
        异常
        IllegalComponentStateException - (运行时异常)如果分层窗格参数是 null
      • getLayeredPane

        public JLayeredPane getLayeredPane​()
        获取根窗格使用的分层窗格。 分层窗格通常保存内容窗格和可选的JMenuBar
        结果
        目前正在使用的 JLayeredPane
      • setGlassPane

        public void setGlassPane​(Component glass)
        将指定的Component设置为此根窗格的玻璃窗格。 玻璃窗格通常应该是一个轻量级的透明组件,因为当根窗格需要抓取输入事件时,它将被显示。

        新的玻璃窗格的可见性已更改为与当前玻璃窗格相匹配。 这意味着,当您要更换玻璃窗格并使其可见时,必须小心。 以下任何一项都将起作用:

          root.setGlassPane(newGlassPane);
           newGlassPane.setVisible(true); 
        要么:
          root.getGlassPane().setVisible(true);
           root.setGlassPane(newGlassPane); 
        参数
        glass -在 Component作为该玻璃面板使用 JRootPane
        异常
        NullPointerException - 如果 glass参数是 null
      • isValidateRoot

        public boolean isValidateRoot​()
        如果这个JRootPane的后代JRootPanerevalidate ,从这里下来验证。

        延迟请求再次布置组件及其后代。 例如,对revalidate调用被推送到JRootPaneJScrollPane因为这两个类都会覆盖isValidateRoot以返回true。

        重写:
        isValidateRootJComponent
        结果
        真正
        另请参见:
        JComponent.isValidateRoot()Container.isValidateRoot()
      • isOptimizedDrawingEnabled

        public boolean isOptimizedDrawingEnabled​()
        glassPanecontentPane具有相同的界限,这意味着JRootPane不对其子代码进行拼贴,并且应该返回false。 另一方面, glassPane通常不可见,因此如果glassPane不可见,则可以返回true。 因此,这里的返回值取决于glassPane的可见性。
        重写:
        isOptimizedDrawingEnabledJComponent
        结果
        如果此组件的子项不重叠,则为true
      • setDefaultButton

        @BeanProperty(description="The button activated by default in this root pane")
        public void setDefaultButton​(JButton defaultButton)
        设置defaultButton属性,该属性确定此JRootPane的当前默认按钮。 默认按钮是在根界面中发生UI定义的激活事件(通常为Enter键)时将激活的按钮,无论按钮是否具有键盘焦点(除非根窗格中有另一个组件消耗激活事件,如JTextPane )。 要使默认激活工作,当激活发生时,该按钮必须是根窗格的启用后代。 要从此根窗格中删除默认按钮,请将此属性设置为null
        参数
        defaultButton - 要作为默认按钮的 JButton
        另请参见:
        JButton.isDefaultButton()
      • paramString

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

        public AccessibleContext getAccessibleContext​()
        获取AccessibleContext与此相关JRootPane 为根窗格,所述AccessibleContext需要一个的形式AccessibleJRootPane 如有必要,将创建一个新的AccessibleJRootPane实例。
        Specified by:
        getAccessibleContext在接口 Accessible
        重写:
        getAccessibleContextComponent
        结果
        一个 AccessibleJRootPane ,作为这个 AccessibleContextJRootPane