2

JFrame如果我在with上设置布局setLayout然后用 with 检索它,getLayout那么我会得到一个不同的LayoutManager. 这里发生了什么??

public class Lay {
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                java.awt.Container container =
                    new javax.swing.JFrame();
                    //new javax.swing.JPanel();
                java.awt.LayoutManager layout =
                    new java.awt.GridLayout();
                container.setLayout(layout);
                layout = container.getLayout();
                System.err.println(layout);
            }
        });
    }
}

java.awt.BorderLayout[hgap=0,vgap=0]

但如果我替换JFrameJPanel我得到

java.awt.GridLayout[hgap=0,vgap=0,rows=1,cols=0]
4

1 回答 1

11

来自Java APIJFrame

public void setLayout(LayoutManager manager)

设置LayoutManager. 覆盖以有条件地将呼叫转发到contentPane. 请参阅以RootPaneContainer获取更多信息。

并从RootPaneContainer页面:

此接口用作 Swing GUI 构建器的标记,这些构建器需要处理类似 的组件JFrame,这些组件包含一个JRootPane特别的 . 为方便起见JFrame,默认情况下,将所有对JDialogJWindowJApplet方法的调用转发到. 这意味着您可以调用:JInternalFrameaddremovesetLayoutcontentPane

rootPaneContainer.add(component);

代替:

rootPaneContainer.getContentPane().add(component);

AJRootPane是一个通用组件,所有重量级组件都使用它来看起来像本机操作系统窗口。它处理菜单栏、关闭/最小化/最大化按钮等,JFrame试图向你隐藏真正起作用的事实JRootPane,但在这种情况下,它只会让事情变得更加混乱。

于 2009-07-08T19:37:32.937 回答