一、绝对布局
在Swing中,除了使用布局管理器之外还可以使用绝对布局。绝对布局,就是硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式来指定组件的位置。
使用绝对布局的步骤如下:
(1)使用Container.setLayout(null)方法取消布局管理器
(2)使用Component.setBounds()方法设置每个组件的大小和位置
示例如下:
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class AbsolutePosition extends JFrame{
public AbsolutePosition() {
setTitle("本窗体使用绝对布局");
setLayout(null);
setBounds(0, 0, 200, 150);
Container c = getContentPane();
JButton b1 = new JButton("按钮1");
JButton b2 = new JButton("按钮2");
b1.setBounds(10,30,80,30);
b2.setBounds(60,70,100,20);
c.add(b1);
c.add(b2);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new AbsolutePosition();
}
}
运行结果如下图所示:
二、流布局管理器
流(FlowLayout)布局管理器是最基本的布局管理器,在整个容器中的布局正如其名,像“流”一样从左到右摆放组件,直到占据了这一行的所有空间,然后再向下移动一行。默认情况下,组件在每一行都是居中排列的,但是通过设置也可以更改组件在每一行上的排列位置。
FlowLayout类中具有以下常用的构造方法:
(1)public FlowLayout()
(2)public FlowLayout(int alignment)
(3)public FlowLayout(int alignment,int horizGap,int vertGap)
构造方法中的alignment参数表示使用流布局管理器后组件在每一行的具体摆放位置,有三个值可以选择:
(1)FlowLayout.LEFT=0
(2)FlowLayout.CENTER=1
(3)FlowLayout.RIGHT=2
构造方法的horizGap和certGap参数表示分别以像素为单位指定组件之间的水平间隔与垂直间隔
示例如下:
import java.awt.Button;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class FlowLayoutPosition extends JFrame{
public FlowLayoutPosition() {
setTitle("本窗体使用流布局管理器");
Container c = getContentPane();
setLayout(new FlowLayout(2,10,10));
for(int i=0;i<10;i++) {
c.add(new Button("button"+i));
}
setSize(300,200);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new FlowLayoutPosition();
}
}
上述示例运行结果如下:
三、边界布局管理器
成员变量 | 含义 |
---|---|
FlowLayout.NOETH | 在容器中添加组件时,组件置于顶端 |
FlowLayout.SOUTH | 在容器中添加组件时,组件置于底部 |
FlowLayout.EAST | 在容器中添加组件时,组件置于右端 |
FlowLayout.WEST | 在容器中添加组件时,组件置于左端 |
FlowLayout.CENTER | 在容器中添加组件时,组件置于中间开始填充,直到与其他组件边界相连 |
示例如下:
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class BorderLayoutPosition extends JFrame{
String[] border = {
BorderLayout.CENTER,BorderLayout.EAST,
BorderLayout.SOUTH,BorderLayout.WEST,
BorderLayout.NORTH
};
String[] buttonName = {"center button","north button",
"south button","west button","east button"
};
public BorderLayoutPosition() {
setTitle("整个窗体使用边界布局管理器");
Container c = getContentPane();
setLayout(new BorderLayout());
for(int i=0;i<border.length;i++) {
c.add(border[i],new JButton(buttonName[i]));
}
setSize(350,200);
setVisible(true);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String args[]) {
new BorderLayoutPosition();
}
}
上述示例运行结果如下图:
四、网格布局管理器
网格(GridLayout)布局管理器将容器划分为网格,所以组件可以按行和列进行排列。在网格布局管理器中,每一个组件的大小都相同,并且网格中空格的个数由网格的行数和列数决定,网格布局管理器主要有以下两个常用方法:
(1)public GridLayout(int rows,int columns)
(2)public GridLayout(int rows,int columns,int horizGap,int vertGap)
上述方法中rows和columns参数代表网格的行数与列数,这两个参数只有一个可以为0;参数horizGap和VertGap指定网格之间的间隔,第一个为网格之间的水平间隔,第二个为网格之间的垂直间隔
示例如下:
import java.awt.*;
import javax.swing.*;
public class GridLayoutPosition extends JFrame{
public GridLayoutPosition() {
Container c = getContentPane();
setLayout(new GridLayout(7,3,5,5));
for(int i=0;i<=20;i++) {
c.add(new JButton("button"+i));
}
setSize(300,300);
setTitle("这是一个使用网格布局管理器的窗体");
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new GridLayoutPosition();
}
}
上述示例运行结果如下: