java之间的区别是什么:使用JFrame类中的getContentPane()和JRootPane中的getContentPane()?
我已经做了一些研究来了解JFrame及其部分的用法,我发现以下信息:
1-JFrame的部分
- 根窗格
- 菜单空白
- 内容窗格
- 玻璃窗
2-JFrame实现接口RootPaneContainer
return type | method name
Container getContentPane();
Container getGlassPane();
JLayeredPane getLayeredPane();
JRootPane getRootPane();
3-JRootPane JFrame的JRootPane。JRootPane是JFrame在幕后使用的轻量级容器
JFrame实现RootPaneContainer接口,它们都将自己的操作委托给JRootPane
注意:JComponent方法getRootPane可用于获取包含给定组件的JRootPane
代码:
public static void main(String[] args) {
//--> create JFrame
JFrame f = new JFrame("Demo Frame");
f.setSize(300, 150);
f.setVisible(true);
//--> now use JFrame.getContentPane()
Container c = f.getContentPane();
//--> use JOptionpane.getContentPane()
JRootPane op = f.getRootPane();
op.getContentPane();
}
问题:为什么我应该使用JRootPane中的getContentPane()方法而不是JFrame
# 1 楼答案
我在帮助别人时找到了答案:
接口RootPaneContainer:
由具有单个JRootPane子级的组件实现:JDialog、JFrame、JWindow、JApplet、JInternalFrame此接口中的方法仅涵盖JRootPane属性
例如getContentPane()通常是这样实现的:
getRootPane()返回JRootPane对象
getContentPanel()返回容器对象
# 2 楼答案
没有区别。调用
frame.getContentPane()
比调用frame.getRootPane().getContentPane()
更方便Swing这样做有两个原因
1)
JFrame
由于JavaDoc中指定的原因,需要将RootPaneContainer
实现为标记2)它有单独的
JRootPane
,因此可以在其他实现类JDialor
和JInternalFrame
中重用它。这就像Delegation模式