代码之家  ›  专栏  ›  技术社区  ›  Tom Hawtin - tackline

为什么jframe布局不是我设置的布局?

  •  2
  • Tom Hawtin - tackline  · 技术社区  · 17 年前

    如果我在 JFrame 具有 setLayout 然后用 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]
    

    但是如果我换的话 窗口 具有 JPanel 我得到

    java.awt.GridLayout[hgap=0,vgap=0,rows=1,cols=0]
    
    1 回复  |  直到 17 年前
        1
  •  11
  •   John Kugelman Michael Hodel    17 年前

    从 Java API for JFrame :

    public void setLayout(LayoutManager manager)
    

    设置 LayoutManager . 重写以有条件地将调用转发到 contentPane . 参照 RootPaneContainer 更多信息。

    从 根盘容器 页:

    这个接口作为Swing GUI构建器的标记,需要像 窗口 ,包含一个 JRootPane ,特别是。为方便起见 窗口 , JDialog , JWindow , JApplet 和 JInternalFrame ,默认情况下,转发,默认情况下,所有调用 add , remove 和 setLayout 方法,以 内容窗格 . 这意味着您可以拨打:

    rootPaneContainer.add(component);
    

    而不是:

    rootPaneContainer.getContentPane().add(component);
    

    一 根窗格 是一个常见的组件,所有重量级组件都使用它来像本机OS窗口一样显示。它处理菜单栏、关闭/最小化/最大化按钮等。 窗口 试图掩盖这样一个事实 根窗格 是你的工作,但在这种情况下,它只是让事情更混乱。