我做了一些研究,以了解 JFrame 及其部分的使用情况,我发现了这个信息:
1-部分JFrame
2- JFrame实现Interface 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?
答案 0 :(得分:2)
没有区别。拨打frame.getContentPane()
比frame.getRootPane().getContentPane()
更方便。
Swing这样做有两个原因。
1)JFrame
需要将RootPaneContainer
作为标记来实现JavaDoc中指定的原因。
2)它具有单独的JRootPane
,因此可以在实现类JDialor
和JInternalFrame
的其他RootPaneContainer中重用它。它就像Delegation模式。
答案 1 :(得分:0)
我找到了一个帮助别人的答案:
界面RootPaneContainer :
由具有单个JRootPane子代的组件实现:JDialog,JFrame,JWindow,JApplet,JInternalFrame。 此界面中的方法仅涵盖JRootPane属性,
<强> e.g。 getContentPane()通常如下所示:
vim
getRootPane(); 返回一个JRootPane对象
getContentPanel(); 返回容器对象