Java 两者之间的区别是:使用JFrame类中的getContentPane();从JRootPane获取ContentPane()?
我已经做了一些研究来了解JFrame及其部分的用法,我发现以下信息: 1-JFrame的部分Java 两者之间的区别是:使用JFrame类中的getContentPane();从JRootPane获取ContentPane()?,java,swing,Java,Swing,我已经做了一些研究来了解JFrame及其部分的用法,我发现以下信息: 1-JFrame的部分 根窗格 菜单空白 内容窗格 玻璃窗 2-JFrame实现接口RootPaneContainer return type | method name Container getContentPane(); Container getGlassPane(); JLayeredPane getLayeredPane(); JRootPane getRo
- 根窗格
- 菜单空白
- 内容窗格
- 玻璃窗
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?没有区别。调用
frame.getContentPane()
比调用frame.getRootPane().getContentPane()
更方便
Swing这样做有两个原因
1) 由于中指定的原因,JFrame
需要将RootPaneContainer
实现为标记
2) 它有单独的
JRootPane
,因此可以在其他RootPaneContainer实现类中重用,如JDialor
和JInternalFrame
。这就像是一种模式。我在帮助别人时找到了一个答案:
接口RootPaneContainer:
由具有单个JRootPane子级的组件实现:JDialog、JFrame、JWindow、JApplet、JInternalFrame此接口中的方法仅涵盖JRootPane属性
例如getContentPane()通常是这样实现的:
public Container getContentPane() {
return getRootPane().getContentPane();
}
getRootPane()返回JRootPane对象
getContentPanel()返回容器对象