关于LayoutManager的问题
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());
请问这是什么原因? --------------------编程问答-------------------- this.add(p2, BorderLayout.NORTH);
楼主你这句话不是修改了layout吗? --------------------编程问答-------------------- 有点神奇。删掉那两句也是BordLayout --------------------编程问答--------------------
没有这句呀,只是“add(p2, BorderLayout.NORTH);”,并没有“setLayout(new BorderLayout());”呀!但却可以执行“add(p2, BorderLayout.NORTH);”这句话。 --------------------编程问答-------------------- 楼主继承Frame就显示正常了,不然一直显示BorderLayout,其实还是自己设的布局吧。不知道为什么LayoutManager 为什么显示错误。 --------------------编程问答-------------------- 自己只是设了GridLayout布局管理器,并没有设BorderLayout,而且BorderLayout.NORTH是个字符串:
public static final String NORTH
自己手动设了GridLayout布局管理器,但返回后检测是BorderLayout?很奇怪
补充:Java , Java SE