import javax.swing.*;
import java.awt.*;public class G extends JFrame
{
public G()
{
setLayout(new GridLayout());
JPanel p1 = new JPanel(new GridLayout(2, 1));
JPanel p2 = new JPanel(new BorderLayout());p1.add(new JButton("B1"));
p2.add(p1, BorderLayout.EAST);
add(p2, BorderLayout.NORTH);
add(new JButton("B2"), BorderLayout.WEST);
}
public static void main(String[] args)  
{
G g = new G();g.setSize(100, 100);
g.setLocationRelativeTo(null);
g.setVisible(true);LayoutManager l = g.getLayout();if (l instanceof FlowLayout)
{
System.out.println("l is FlowLayout\n");
}if (l instanceof GridLayout)
{
System.out.println("l is GridLayout\n");
}if (l instanceof BorderLayout)
{
System.out.println("l is BorderLayout\n");
}
}}输出结果为:l is BorderLayout。不明白为什么是这个答案,因为之前已经用了setLayout(new GridLayout());
请问这是什么原因?

解决方案 »

  1.   

    this.add(p2, BorderLayout.NORTH);
    楼主你这句话不是修改了layout吗?
      

  2.   

    有点神奇。删掉那两句也是BordLayout
      

  3.   


    没有这句呀,只是“add(p2, BorderLayout.NORTH);”,并没有“setLayout(new BorderLayout());”呀!但却可以执行“add(p2, BorderLayout.NORTH);”这句话。
      

  4.   

    楼主继承Frame就显示正常了,不然一直显示BorderLayout,其实还是自己设的布局吧。不知道为什么LayoutManager 为什么显示错误。
      

  5.   

    自己只是设了GridLayout布局管理器,并没有设BorderLayout,而且BorderLayout.NORTH是个字符串:
    public static final String NORTH
    自己手动设了GridLayout布局管理器,但返回后检测是BorderLayout?很奇怪