JRootPane这个类是不是多余的啊?

sure2003 2009-02-11 04:15:17
我觉得十分奇怪。这个类可能不是很用。
JFrame对象的getRootPanel().setDefaultButton(buttonOK);
有意义吗?
我觉得完全可以用其实方法来实现JRootPanel里的方法。
不知道我的看法是否正确。
...全文
381 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQLserver2009 2009-11-16
  • 打赏
  • 举报
回复
你滴图片看不到啊!!
不善^ 2009-02-11
  • 打赏
  • 举报
回复
只有你用不到,没有多余的
oO小良Oo 2009-02-11
  • 打赏
  • 举报
回复
API上拷来的,喜欢的话给点分。

谢谢~
oO小良Oo 2009-02-11
  • 打赏
  • 举报
回复
public class JRootPaneextends JComponentimplements Accessible该轻量级容器由 JFrame、JDialog、JWindow、JApplet 和 JInternalFrame 在后台使用。有关根窗格所提供功能的面向任务的信息,请参阅《The Java Tutorial》中的 How to Use Root Panes 一节。

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



“重量级”组件(指委托给主机系统上的同位体或本地组件的组件)用较暗的、更重的框来显示。四个重量级 JFC/Swing 容器(JFrame、JDialog、JWindow 和 JApplet)的显示与它们扩展的 AWT 类有关。这四个组件是 Swing 库中仅有的重量级容器。这里还显示了轻量级容器 JInternalPane。所有这五个 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 中用不透明颜色将背景完全填充。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧