布局管理器学习笔记
1.4 LayoutManager布局管理器
LayoutManeger布局管理器可以根据运行平台来调整组件大小,程序员不用再手动设置组件的大小和位置,只需要为容器选择合适的布局管理器即可。
1.4.1 FlowLayout(JPanel的默认布局管理器)
组件像水流一样向某方向流动(排列),遇到障碍(边界)就折回,从头开始排列。默认情况下,FlowLayout布局管理器从左到右排列所有组件,遇到边界就会折回下一行重新开始。
构造方法 | 方法功能 |
---|---|
FlowLayout() | 使用默认的对齐方式及默认的垂直间距、水平间距创建FlowLayout布局管理器。 |
FlowLayout(int align) | 使用指定的对齐方式及默认的垂直间距、水平间距创建FlowLayout布局管理器。 |
FlowLayout(int align,int hgap,int vgap) | 使用指定的对齐方式及默认的垂直间距、水平间距创建FlowLayout布局管理器。 |
align:使用FlowLayout类的静态常量:FlowLayout.LEFT、FlowLayout.CENTER、FlowLayout.RIGHT,默认左对齐。
hgap(水平间距),vgap(垂直间距):通过整数设置,单位是像素,默认是5个像素。
代码演示:
import java.awt.*;
public class FlowLayoutDemo {
public static void main(String[] args) {
Frame frame = new Frame("测试FlowLayout");
//1.通过setLayout方法设置容器的布局管理器
frame.setLayout(new FlowLayout(FlowLayout.LEFT,20,20));//可以修改参数观察不同效果
//2.添加多个按钮到frame
for (int i = 1; i <= 100; i++) {//快捷100.fori
frame.add(new Button("按钮"+i));
}
//3.设置最佳大小,通过pack方法
frame.pack();
frame.setVisible(true);
}
}
1.4.2 BorderLayout(边框布局管理器)
JFrame的默认布局管理器,当改变使用BorderLayout的容器大小时,各组件相对位置不变,南北组件高度不变,东西组件宽度不变,的那中间部分组建的尺寸发生变化。
构造方法 | 方法功能 |
---|---|
BorderLayout() | 各组件间的水平和竖直间距为缺省值0个像素 |
BorderLayout(int horizontalGap,int verticalGap) | 各组件间的水平和竖直间距为指定值 |
1.如果不往某个区域放组件,则该区域不会空出来,而是被其他区域占用
代码示例1:
import java.awt.*;
public class BorderLayoutDemo {
public static void main(String[] args) {
Frame frame = new Frame("测试");
//1.给frame设置BorderLayout布局管理器
frame.setLayout(new BorderLayout());
//2.往frame的指定区域添加组件
frame.add(new Button("北侧按钮"),BorderLayout.NORTH);
frame.add(new Button("南侧按钮"),BorderLayout.SOUTH);
frame.add(new Button("中间按钮"),BorderLayout.CENTER);
frame.add(new TextField("测试文本框"));
frame.pack();//设置最佳大小
frame.setVisible(true);
}
}
运行结果:
2.如果想在某一区域放入两个组件,则将组件添加进Panel中,否则先加入的组件会被后加入的组件覆盖。
代码示例2:
import java.awt.*;
public class BorderLayoutDemo2 {
public static void main(String[] args) {
Frame frame = new Frame("测试");
//1.给frame设置BorderLayout布局管理器
frame.setLayout(new BorderLayout());
//2.往frame的指定区域添加组件
frame.add(new Button("北侧按钮"),BorderLayout.NORTH);
frame.add(new Button("南侧按钮"),BorderLayout.SOUTH);
Panel panel = new Panel();
panel.add(new TextField("测试文本框"));
panel.add(new Button("中间按钮"));
frame.add(panel);
frame.pack();//设置最佳大小
frame.setVisible(true);
}
}
1.4.3 GridLayout(网格布局管理器)
根据构造方法定义的行数和列数,使容器中的各组件呈网格状分布。容器中的各组件高度和宽度相同,当容器尺寸发生变化时,各组件相对位置不变,但各自尺寸会发生变化。
容器中各组件默认排列方式为:从左到右、从上到下
如果想在一个网格中添加多个组件,则必须先将该网格单元放入一个JPanel容器中,再将多个组件放在该JPanel容器中。
构造方法 | 方法功能 |
---|---|
GridLayout() | 在一行放置所有的组件,各组件水平间距0像素 |
GridLayout(int rows,int cols) | 规定行数和列数,组件间水平间距和垂直间距为0像素。可以有一个参数为0,若某参数为0,则表示可以有任意行(rows为0)/列(cols为0),若两者都不为0,则行数是主要参数,列数是具体组件数动态确定。 |
GridLayout(int rows,int cols,int hgap,int vagp) | 指定水平和竖直间距 |
代码示例:
package com.jyh.awt.layout;
import java.awt.*;
public class GridLayoutDemo {
public static void main(String[] args) {
Frame frame = new Frame("计算器");
//1.创建一个Panel对象,里面存放一个TextField组件
Panel panel = new Panel();
panel.add(new TextField(30));
//2.把这个Panel添加到frame的北边区域
frame.add(panel,BorderLayout.NORTH);
//3.创建一个Panel对象,并且设置他的布局管理器为GridLayout
Panel panel1 = new Panel();
panel1.setLayout(new GridLayout(3,5,4,4));
//4.往Panel中添加内容
for (int i = 0; i < 10; i++) {
panel1.add(new Button(i+""));//Button里要设置为字符类型,因此i+""将其转换为字符类型
}
panel1.add(new Button("+"));
panel1.add(new Button("-"));
panel1.add(new Button("*"));
panel1.add(new Button("/"));
panel1.add(new Button("."));
//5.把当前Panel添加到frame中
frame.add(panel1);
frame.pack();
frame.setVisible(true);
}
}
运行结果:
1.4.4 GridBagLayout(网格包布局管理器)
与GridLayout布局管理器不同的是,在GridBagLayout布局管理器中,一个组件可以跨越一个或多个网络,并可以设置各网格的大小互不相同,从而增加布局的灵活性。
但是一般不使用,因为Swing中有更加强大的布局管理器,这里不详细介绍。
1.4.5 CardLayout(卡片布局管理器)
CardLayout布局管理器以时间而非空间来管理他的组件,它将加入容器的所有组件看成一叠卡片,每次只有最上面的那个Component才可见,就像一副扑克牌,他们叠在一起,每次只有最上面的才可见。
方法 | 方法功能 |
---|---|
CardLayout() | |
CardLayout(int hgap,int vagp) | |
first(Container target) | 显示target容器中的第一张卡片 |
last(Container target) | 显示target容器中的最后一张卡片 |
previous(Container target) | 显示target容器中的前一张卡片 |
next(Container target) | 显示target容器中的后一张卡片 |
show(Container target,String name) | 显示target容器中的指定名字的卡片 |
1.4.6 BoxLayout布局管理器
在java.swing中,提供了一个新的容器Box,该容器的默认管理器就是BoxLayout。
示例:
教材232页Example9_5.java
还有一些设置间距的方法,这里不详细介绍。
1.4.7 null布局管理器