写在前面:
大家好,我是 花狗Fdog ,来自内蒙古的一个小城市,目前在泰州读书。
很感谢能有这样一个平台让我能够在这里分享所学所感。
我喜欢编程,喜欢代码,喜欢去做一个程序员。
努力学习,争取多年后,给亲人更好的生活。
QQ/WX:2506897252 欢迎交流。
1.绝对布局
绝对布局,就是可以硬性指定组件在容器中的位置和大小,使用绝对坐标来指定组件的位置与大小。
步骤如下:
(1)使用Container.setLayout(null)方法取消布局管理器。
(2)使用Component.setBounds()方法设置每个组件的大小与位置。
package number;
import java.awt.*;
import javax.swing.*;
public class c1 extends JFrame {
public void windows() {
JFrame jf =new JFrame("本窗口使用绝对布局");
//jf.setTitle("不好"); 上面和这句都是用来设置标题。
jf.setLayout(null);//使窗体取消布局管理器设置
jf.setBounds(700,300,300,300);
//4个参数分别为x,y,width,height x,y代表窗体左上角出现的位置,width,height代表这个窗体的宽与长
Container container =jf.getContentPane();
JButton b1 =new JButton("按钮1");
JButton b2 =new JButton("按钮2"); //创建按钮
b1.setBounds(10,30,80,30);
b2.setBounds(60,70,100,20); //按钮位置
container.add(b1);
container.add(b2);//将按钮添加到容器
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗体关闭方式
}
public static void main(String[] args) {
new c1().windows();
}
}
2.流布局管理器
整个容器中的布局像“流“一样从左到右摆放组件,直到占据了这一行的所有空间,然后再向下移动一行。
FlowLayout中的第一个参数表示组件在每一行的具体摆放位置,可以有三种,值分别为:
- 0:左对齐
- 1:居中
- 2:右对齐
后面两个参数分别以像素为单位指定组件之间的水平间隔和垂直间隔。
package number;
import java.awt.*;
import javax.swing.*;
public class liu extends JFrame {
public void windows() {
JFrame jf=new JFrame("流布局");
Container container =jf.getContentPane();
jf.setLayout(new FlowLayout(1,10,10));
for(int i=0;i<10;i++) {
container.add(new JButton("按钮"+i));
}
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
jf.setSize(500,500);
}
public static void main(String[] args) {
new liu().windows();
}
}
2.边界布局管理器
在默认不指定窗体布局的情况下,Swing组件的布局模式是边界布局管理器,如果在容器中只添加了一个标签组件,这个标签将被放置在窗体中间,而且整个组件占据窗体的所有空间,边界布局管理器还可以将容器划分为东,南,西,北,中五个区域,可以将组件加入到这五个区域,区域的控制可以由BorderLayout类中的成员变量来决定,这些成员变量的具体含义如下:
成员变量 | 含义 |
---|---|
BorderLayout.CENTER | 在容器添加组件时,组件位于顶端 |
BorderLayout.NORTH | 在容器添加组件时,组件位于底端 |
BorderLayout.SOUTH | 在容器添加组件时,组件位于右端 |
BorderLayout.WEST | 在容器添加组件时,组件位于左端 |
BorderLayout.EAST | 在容器添加组件时,组件位于中间开始填充,直到与其他组件边界连接 |
package number;
import java.awt.*;
import javax.swing.*;
public class bianjian extends JFrame {
//定义组件摆放位置的数组
String border[]= {BorderLayout.CENTER,
BorderLayout.NORTH,BorderLayout.SOUTH,
BorderLayout.WEST,BorderLayout.EAST};
String buttonName[]= {"按钮1","按钮2","按钮3","按钮4",
"按钮5","按钮6","按钮7","按钮8"};
public bianjian() {
setTitle("边界布局");
Container container =getContentPane();
setLayout(new BorderLayout());
for(int i=0;i<border.length;i++) {
container.add(border[i],new JButton(buttonName[i]));
}
setVisible(true);
setSize(350,200);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
public static void main(String[] args) {
new bianjian();
}
}
2.网格布局管理器
网格布局管理器将容器划分为网格,所以组件可以按行和列进行排列。在网格布局管理器中,每一个组件的大小都相同,并且网格中空格的个数由网格的行数和列数决定,如一个两行两列的网格能产生4个大小相等的网格。组件从网格的左上角开始,按照从左到右,从上到下的顺序加入网格,每个组件都会被填满整个网络,改变窗体的大小,组件的大小也会随之改变。
package number;
import java.awt.*;
import javax.swing.*;
public class wangluo extends JFrame {
public void wind() {
JFrame jf =new JFrame("网络布局");
Container c =jf.getContentPane();
jf.setLayout(new GridLayout(7,3,5,5));
for(int i=0;i<20;i++) {
c.add(new JButton("button"+i));
}
jf.setSize(300,300);
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new wangluo().wind();
}
}
5.资源
这里写的方法有限,如果还想了解更多,可以查看javaSE文档,还有些小伙伴可能需要这个录制动态图的软件:LICEcap.exe
文档以及工具
若有错误,欢迎指正批评,欢迎评论。
每文一句:凡事都是试一试,就是不能证明我可以,也要证明我不可以。