2:Swing布局

一:绝对定位(设置布局null)

绝对定位就是指不使用布局器,组件的位置和大小需要单独指定

 JFrame f = new JFrame("title");
        f.setSize(400, 300);
        f.setLocation(200, 200);
        // 设置布局器为null,即进行绝对定位,容器上的组件都需要指定位置和大小
        f.setLayout(null);
        JButton b1 = new JButton("AAA");
        // 指定位置和大小
        b1.setBounds(50, 50, 80, 30);
        
轴点:左上角
public void setBounds(int x,
                      int y,
                      int width,
                      int height)

二:BorderLayout

2:Swing布局


public void init() {
     setLayout(new BorderLayout());
     add(new Button("North"), BorderLayout.NORTH);
     add(new Button("South"), BorderLayout.SOUTH);
     add(new Button("East"), BorderLayout.EAST);
     add(new Button("West"), BorderLayout.WEST);
     add(new Button("Center"), BorderLayout.CENTER);
   }
 }
 
 
 


备注: 在使用边界布局的时候,我们会发现它的区域的大小好像被限制死了,无法按照自己想要的大小来合理分配。 而在这个时候使用setSize()不起作用。
解决方法是使用 setPreferredSize()来设置自定义大小

        getContentPane().add(p, BorderLayout.NORTH);
        getContentPane().add(panel, BorderLayout.SOUTH);
        p.setPreferredSize(new Dimension(0, 250));//使用Dimension()方法来设置自定义的宽度和高度
        panel.setPreferredSize(new Dimension(400, 100));
 
JDK文档:

public class Dimension
extends Dimension2D
implements SerializableDimension类封装单个对象中组件的宽度和高度(以整数精度)。 该类与组件的某些属性相关联。 Component类和LayoutManager接口定义的几种方法返回一个Dimension对象。 
通常width和height的值是非负整数。 允许您创建维度的构造函数不会阻止您为这些属性设置负值。 如果width或height值为负,则其他对象定义的某些方法的行为是未定义的。



三:FlowLayout

设置布局器为FlowLayout,顺序布局器
容器上的组件水平摆放
加入到容器即可,无需单独指定大小和位置

2:Swing布局


三:GridLayout

GridLayout类是一个布局管理器,它将一个容器的组件放在矩形网格中。 容器被分成等大小的矩形,并且每个矩形中放置一个组件。

 public void init() {
         setLayout(new GridLayout(3,2));  //三行俩列的布局,下面的添加的按钮会根据添加的前后依次放入网格中
         add(new Button("1"));
         add(new Button("2"));
         add(new Button("3"));
         add(new Button("4"));
         add(new Button("5"));
         add(new Button("6"));
     }

2:Swing布局

四:CardLayout

CardLayout类排列卡的容器中的每个组件。在一个时间内只有一张卡是可见,与容器作为将整叠卡片。就像是web端的Tab切换一样,一般是使用面板来配合完成。

2:Swing布局

[备注:上面图片来源于网络和jdk文档]