容器布局【绝对布局,流布局,边界布局,网格布局】

1.【绝对布局】也称为【null布局】   null布局出现就是在容器中使用坐标控制组件的位置

(x坐标)0-----n:宽|

                      | 单位:像素

(y坐标)0-----n:高|/

优势:容器中的按钮可以放在任意的位置

劣势:窗口大小改变都不会改变按钮位置,如想改变需通过代码进行改变

//导入Java类
import javax.swing.*;
import java.awt.*;
public class Demo extends JFrame{
  public Demo(){
     setBounds(100,100,100,150);
     setVisible(true);
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     
     Container c=getContentPane();
     c.setLayout(null);//设置流体布局  将容器布局设置为:绝对布局
     JButton btn1=new JButton("按钮1"),btn2=new JButton("按钮2");//创建‘按钮1,按钮2’的实例化对象 创建两个按钮
     btn1.setBounds(10,30,80,30);//设置‘按钮1’的坐标及大小
     btn2.setBounds(60,70,100,20);//设置‘按钮2’的坐标及大小
     c.add(btn1);
     c.add(btn2);
}
}
public static void main(String[] args){
  new Demo();//可保存运行
}

2.流布局】----- FlowLayout

* 下图为默认居中对齐

//导入Java类
import javax.swing.*;
import java.awt.*;
public class Demo extends JFrame{
     public Demo(){
        setVisible(true);
        setBounds(100,100,300,200);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        Container c=getContentsPane();
        c.setLayout(new FllowLayout());//给容器设置流布局   可设置流布局的位置和按钮间距
       // 流布局()内无参数时默认为居中对齐
//c.setLayout(new FllowLayout(FllowLayout.RIGHT));//右对齐
//// c.setLayout(new FlowLayout(FlowLayout.RIGHT,20,20));//右对齐,控件间距20

for(int i=0;i<10;i++){//添加for()循环语句 c.add(new JButton("按钮"+i));//给循环语句添加循环按钮组件 } setVisible(true); } public static void main(String[] args){ new Demo(); } }

 3.【边界布局】  边界布局BorderLayout, 将容器划分为中,东,西,南,北五个区域,默认的添加在五个区域中,当同一个区域同时出现相同的控件,则旧控件会被新控件覆盖.

导入Java类
import javax.swing.*;
import java.awt.*;
public class Demo extends JFrame{
         public Demo(){
         setVisible(true);
         setBounds(100,100,350,200);
         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
         
         Container c=getContentPane();
         c.setLayout(new BorderLayout());//给容器设置边界布局
         JButton  btn1=new JButton("中"),
                     btn2=new JButton("东"),
                     btn3=new JButton("西"),
                     btn4=new JButton("南"),
                     btn5=new JButton("北");
         
       //c.add(添加的组件名称,Borderlayout.提供的常量);
          c.add(btn1,BorderLayout.CENTER);
          c.add(btn2,BorderLayout.EAST);
          c.add(btn3,BorderLayout.WEST);
          c.add(btn4,BorderLayout.SOUTH);
          c.add(btn5,BorderLayout.NORTH); 

//c.add(new JButton(新名称),旧的组件);
//c.add(new JButton("覆盖"),BorderLayout.CENTER);

          setVisible(true);                
}
public static void main(String[] args){
         new Demo();
}
}

4. 【网格布局】 new GridLayout 改变窗体大小组件的位置不会改变.组件的大小会随着窗体的大小而改变

当网格组件中的组件JButton过多或过少时,网格会自动调整布局,行数不会变,列变

//导入Java类
import javax.swing.*;
import java.awt.*;
public class Demo extends JFrame{
         public Demo(){
         setBounds(100,100,300,300);
         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

         Container c=getContentPane();
      //c.setLayout(new GridLayout(行,列,水平间距,竖直间距));
         c.setLayout(new GridLayout(rows:2,cols:3));//给容器设置网格布局
          
         for(int i=0;i<6;i++){
              c.add(new JButton("按钮"+i));//给容器添加循环按钮组件
} 
          setVisible(true);   
}
public static void main(String[] args){
  new Demo();
}
}
原文地址:https://www.cnblogs.com/mld1040871703/p/10087734.html