JAVA_GUI_AWT_BorderLayout相关问题(不能被连续引用多次)

import java.awt.*;

public class TenButtons {
    public static void main(String[] args) {
        GridLayout gl21 = new GridLayout(2,1);
        GridLayout gl22 = new GridLayout(2,2);
        BorderLayout bl = new BorderLayout();
        BorderLayout bl1 = new BorderLayout();

        Frame f1 = new Frame("TenButton");
        f1.setLayout(gl21);
        f1.setLocation(300, 400);
        Panel p1 = new Panel(bl1);
        //Panel p1 = new Panel(bl);
        Panel p2 = new Panel(bl);           
        Panel ucenter = new Panel(gl21);    
        Panel dcenter = new Panel(gl22);    

        Button btnuw = new Button("UpWest");
        Button btnue = new Button("UpEast");
        p1.add(btnuw, BorderLayout.WEST);   
        p1.add(btnue, BorderLayout.EAST);       
        Button btnu = new Button("CenterUp");
        Button btnd = new Button("CenterDown");
        ucenter.add(btnu);  
        ucenter.add(btnd);
        p1.add(ucenter, BorderLayout.CENTER);

        Button btndw = new Button("DownWest");
        Button btnde = new Button("DownEast");      
        p2.add(btndw, BorderLayout.WEST);   
        p2.add(btnde, BorderLayout.EAST);       
        for (int i=1; i<=4; i++) {
            dcenter.add(new Button("Center" + i));
        }
        p2.add(dcenter, BorderLayout.CENTER);

        f1.add(p1); 
        f1.add(p2);
        f1.pack();
        f1.setVisible(true);

    }
}

不知道为什么我BorderLayout连续引用两次会出现不同的结果??

这样出现结果正常

Panel p1 = new Panel(bl1);
Panel p2 = new Panel(bl);   

正确结果

这样出现的结果就没有了p1

Panel p1 = new Panel(bl);
Panel p2 = new Panel(bl);   

错误结果,p1不见了

然而 GridLayout gl21 也是被引用了两次(一次是Frame f1 ,一次是Panel ucenter),却没事

我试了一下,,p1设置的控件被p2设置的给覆盖掉了(至于怎么覆盖的我还没看出来)

到最后 f1.add(p1); f1.add(p2);,,起始p1里已经没东西了,,,题主可以把f1.add(p2);注释了,,,窗口什么东西都没了。

把f1.add(p1); 放在如下位置,,可以正常运行

 Panel p1 = new Panel(bl);
Panel p2 = new Panel(bl);   
。。。
 p1.add(ucenter, BorderLayout.CENTER);
 f1.add(p1); 
 Button btndw = new Button("DownWest");

 。。。