java.lang.Objectjava.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JRootPane
public class JRootPane
该轻量级容器由 JFrame、JDialog、JWindow、JApplet 和 JInternalFrame 在后台使用。有关根窗格所提供功能的面向任务的信息,请参阅 The Java Tutorial 中的 How to Use Root Panes 一节。
下面的图像显示了使用根窗格的各个类之间的关系。

JFrame、
JDialog、
JWindow 和
JApplet)的显示与它们扩展的 AWT 类有关。这四个组件是 Swing 库中仅有的重量级容器。这里还显示了轻量级容器
JInternalFrame。所有这五个 JFC/Swing 容器都实现
RootPaneContainer 接口,并且它们都将其操作委托给
JRootPane(顶端显示有一个小 "handle")。
注:使用JComponent的getRootPane方法可获取包含给定组件的JRootPane。
|
JRootPane 的结构。
JRootpane 由一个
glassPane 和一个可选的
menuBar 以及一个
contentPane 组成。(
JLayeredPane 负责管理
menuBar 和
contentPane。)
glassPane 位于所有窗格之上,以便能够截取鼠标移动。由于
glassPane(与
contentPane 类似)可以是一个任意的组件,也可以设置
glassPane 来进行绘制。这样
glassPane 上的线条和图像可涵盖其下的窗体,不受其边界的限制。
尽管 menuBar 组件为可选,但 layeredPane、contentPane 和 glassPane 总是存在的。试图将它们设置为 null 将生成异常。
要将组件添加到 JRootPane(可选的菜单栏除外),您可以将对象添加到 JRootPane 的 contentPane,如下所示:
rootPane.getContentPane().add(child);
可用同样的方法设置布局管理器、移除组件以及列出子级等。所有这些方法都是在
contentPane 上而不是
JRootPane 上调用的。
注:如果已在contentPane的默认布局管理器是BorderLayout管理器。但是,JRootPane使用一个自定义的LayoutManager。所以,如果您希望更改已添加到JRootPane中的组件的布局管理器,一定要确保使用如下代码:rootPane.getContentPane().setLayout(new BoxLayout());
JRootPane 上设置了
JMenuBar 组件,它将沿窗体的上边缘放置。
contentPane 的位置和大小将进行调整以填充剩余的区域。(
JMenuBar 和
contentPane 被添加到位于
JLayeredPane.FRAME_CONTENT_LAYER 层的
layeredPane 组件中。)
layeredPane 是 JRootPane 中所有子级的父级,既是菜单的直接父级,又是添加到 contentPane 中的所有组件的祖父级。它是 JLayeredPane 的实例,提供在若干层上添加组件的能力。在处理弹出菜单、对话框以及拖动时,即要求将组件置于窗格中所有其它组件之上的情况下,此功能非常有用。
glassPane 位于 JRootPane 中所有其它组件之上。这为在所有其它组件上绘图和截取鼠标事件提供了方便,这对拖动和绘图都非常有用。开发人员可在 glassPane 上使用 setVisible 控制 glassPane 在所有其它子级上面显示的时间。默认情况下,glassPane 为不可见。
JRootPane 所使用的自定义 LayoutManager 可确保:
glassPane 填充了 JRootPane 的整个可查看区域(边界 - insets)。 layeredPane 填充了 JRootPane 的整个可查看区域。(边界 - insets) menuBar 位于 layeredPane 的上边缘。 contentPane 填充了整个可查看区域,减去 menuBar(如果有)。 JRootPane 视图层次结构中的任何其它视图均忽略。
如果您替换 JRootPane 的 LayoutManager,您将负责管理所有这些视图。所以通常情况下,应该确保更改的是 contentPane 的布局管理器,而不是 JRootPane 自身的布局管理器。
Swing 的绘制架构要求在所有其它组件之上的包含层次结构中有一个不透明的 JComponent。这通常通过使用内容窗格来实现。如果要替换内容窗格,建议使用 setOpaque(true) 将内容窗格设置为不透明。另外,如果内容窗格重写 paintComponent,还需要在 paintComponent 中用不透明颜色将背景完全填充。
警告:Swing 不是线程安全的。有关更多信息,请参阅 Swing's Threading Policy。
警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans 包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder。
JLayeredPane,
JMenuBar,
JWindow,
JFrame,
JDialog,
JApplet,
JInternalFrame,
JComponent,
BoxLayout,
Mixing Heavy and Light Components
| 嵌套类摘要 | |
|---|---|
protected class |
JRootPane.AccessibleJRootPane 此类实现对 JRootPane 类的可访问性支持。 |
protected class |
JRootPane.RootLayout 该自定义布局管理器负责 layeredPane、glassPane 和 menuBar 的布局。 |
| 从类 javax.swing.JComponent 继承的嵌套类/接口 |
|---|
JComponent.AccessibleJComponent |
| 从类 java.awt.Container 继承的嵌套类/接口 |
|---|
Container.AccessibleAWTContainer |
| 从类 java.awt.Component 继承的嵌套类/接口 |
|---|
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy |
| 字段摘要 | |
|---|---|
static int |
COLOR_CHOOSER_DIALOG 供 windowDecorationStyle 属性使用的常量。 |
protected Container |
contentPane 内容窗格。 |
protected JButton |
defaultButton 当窗格成为焦点并有类似按下 Enter 键的特定于 UI 的操作发生时被激活的按钮。 |
protected javax.swing.JRootPane.DefaultAction |
defaultPressAction 已过时。 从 Java 2 platform v1.3 开始 |
protected javax.swing.JRootPane.DefaultAction |
defaultReleaseAction 已过时。 从 Java 2 platform v1.3 开始 |
static int |
ERROR_DIALOG 供 windowDecorationStyle 属性使用的常量。 |
static int |
FILE_CHOOSER_DIALOG 供 windowDecorationStyle 属性使用的常量。 |
static int |
FRAME 供 windowDecorationStyle 属性使用的常量。 |
protected Component |
glassPane 覆盖菜单栏和内容窗格的玻璃窗格,便于截取鼠标移动等操作。 |
static int |
INFORMATION_DIALOG 供 windowDecorationStyle 属性使用的常量。 |
protected JLayeredPane |
layeredPane 管理菜单栏和内容窗格的分层窗格。 |
protected JMenuBar |
menuBar 菜单栏。 |
static int |
NONE 供 windowDecorationStyle 属性使用的常量。 |
static int |
PLAIN_DIALOG 供 windowDecorationStyle 属性使用的常量。 |
static int |
QUESTION_DIALOG 供 windowDecorationStyle 属性使用的常量。 |
static int |
WARNING_DIALOG 供 windowDecorationStyle 属性使用的常量。 |
| 从类 javax.swing.JComponent 继承的字段 |
|---|
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
| 从类 java.awt.Component 继承的字段 |
|---|
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
| 从接口 java.awt.image.ImageObserver 继承的字段 |
|---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
| 构造方法摘要 | |
|---|---|
JRootPane() 创建 JRootPane,设置其 glassPane、layeredPane 以及 contentPane。 |
|
| 方法摘要 | |
|---|---|
protected void |
addImpl(Component comp, Object constraints, int index) 重写以便将玻璃组件的位置强行设置成零位子级。 |
void |
addNotify() 将本身注册为 SystemEventQueueUtils 的新的根窗格。 |
protected Container |
createContentPane() 由构造方法调用以便创建默认的 contentPane。 |
protected Component |
createGlassPane() 由构造方法调用以便创建默认的 glassPane。 |
protected JLayeredPane |
createLayeredPane() 由构造方法调用以便创建默认的 layeredPane。 |
protected LayoutManager |
createRootLayout() 由构造方法调用以便创建默认的 layoutManager。 |
AccessibleContext |
getAccessibleContext() 获取与此 JRootPane 相关联的 AccessibleContext。 |
Container |
getContentPane() 返回内容窗格,它是保存以根窗格为父级的组件的容器。 |
JButton |
getDefaultButton() 返回 defaultButton 属性的值。 |
Component |
getGlassPane() 返回此 JRootPane 的当前玻璃窗格。 |
JMenuBar |
getJMenuBar() 返回窗格层的菜单栏。 |
JLayeredPane |
getLayeredPane() 获取供根窗格使用的分层窗格。 |
JMenuBar |
getMenuBar() 已过时。 从 Swing 版本 1.0.3 开始,由 getJMenuBar() 取代。 |
RootPaneUI |
getUI() 返回呈现此组件的 L&F 对象。 |
String |
getUIClassID() 返回一个指定呈现此组件的 L&F 类名称的字符串。 |
int |
getWindowDecorationStyle() 返回一个常量,它标识 JRootPane 提供的 Window 装饰类型。 |
boolean |
isOptimizedDrawingEnabled() glassPane 和 contentPane 具有相同的边界,这意味着 JRootPane 并不对其子级平铺,应返回 false。 |
boolean |
isValidateRoot() 如果此 JRootPane 的一个后代调用 revalidate,将从此位置开始进行验证。 |
protected String |
paramString() 返回此 JRootPane 的字符串表示形式。 |
void |
removeNotify() 将本身从 SystemEventQueueUtils 注销。 |
void |
setContentPane(Container content) 设置内容窗格,它是保存以根窗格为父级的组件的容器。 |
void |
setDefaultButton(JButton defaultButton) 设置 defaultButton 属性,它确定此 JRootPane 的当前默认按钮。 |
void |
setDoubleBuffered(boolean aFlag) 设置此组件是否应该使用缓冲区进行绘制。 |
void |
setGlassPane(Component glass) 将指定的 Component 设置为此根窗格的玻璃窗格。 |
void |
setJMenuBar(JMenuBar menu) 添加或更改在分层窗格中使用的菜单栏。 |
void |
setLayeredPane(JLayeredPane layered) 设置供根窗格使用的分层窗格。 |
void |
setMenuBar(JMenuBar menu) 已过时。 从 Swing 版本 1.0.3 开始,由 setJMenuBar(JMenuBar menu) 取代。 |
void |
setUI(RootPaneUI ui) 设置呈现此组件的 L&F 对象。 |
void |
setWindowDecorationStyle(int windowDecorationStyle) 设置 JRootPane 应提供的 Window 装饰类型(例如,边界、关闭 Window 的小部件、标题等)。 |
void |
updateUI() 将 UI 属性重置为当前外观对应的值。 |