Java Swing开发容器与布局
1 容器
1.1 JFrame(窗口框架)顶级容器
JFrame类常用构造方法
JFrame();
JFrame(String title);
JFrame顶级容器案例
import javax.swing.*;
public class JFrameDemo extends JFrame {
//继承类构造方法
public JFrameDemo() {
//调用父类构造方法,指定窗口标题
super("JFrame容器演示");
//设置窗口大小
this.setSize(400, 300);
//设置窗口左上角坐标
this.setLocation(200, 100);
//设置窗口关闭方式
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口可见
this.setVisible(true);
}
public static void main(String[] args) {
//实例化一个JFrameDemo对象
new JFrameDemo();
}
}
1.1 JPanel中间容器
JPanel中间容器案例
import javax.swing.*;
public class JPanelDemo extends JFrame {
//声明一个面板对象
private JPanel jp;
//声明两个按钮对象
private JButton btnOk, btnCancel;
public JPanelDemo() {
super("JPanelDemo演示");
//实例化面板对象
jp = new JPanel();
//实例化两个按钮对象
btnOk = new JButton("确认");
btnCancel = new JButton("取消");
//将按钮添加到面板中
jp.add(btnOk);
jp.add(btnCancel);
//将面板添加至窗体中
this.add(jp);
//设置窗口大小
this.setSize(400, 300);
//设置窗口左上角坐标
this.setLocation(200, 100);
//设置窗口关闭方式
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口可见
this.setVisible(true);
}
public static void main(String[] args) {
new JPanelDemo();
}
}
2 布局
2.1 FlowLayout流布局
FlowLayout流布局是将容器中的组件按照从左到右的顺序,流动地排列和分布,流布局是页面默认布局
FlowLayout类的构造方法
FlowLayout()
FlowLayout(int align)
FlowLayout(int align,int hgap,int vgap)
import java.awt.FlowLayout;
//实例化面板对象
jp = new JPanel();
//创建一个流布局对象,对齐方式为左对齐,水平间距10像素,垂直像素15间距
FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 10, 15);
//设置面板的布局
jp.setLayout(layout);
//上面三行代码可以简化为
//jp=new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 15));
2.2 BorderLayout边界布局
BorderLayout边界布局允许将组件有选择地放置到容器的中部、 北部、南部、东部、西部这五个区域
BorderLayout边界布局案例
import javax.swing.*;
import java.awt.*;
public class BorderLayoutDemo extends JFrame {
private JPanel p;
private JButton btn1, btn2, btn3, btn4, btn5;
public BorderLayoutDemo() {
super("BorderLayoutDemo边界布局");
p = new JPanel();
//创建一个边界管理器对象,并将该布局设置到面板中
p.setLayout(new BorderLayout());
//创建按钮
btn1 = new JButton("按钮1");
btn2 = new JButton("按钮2");
btn3 = new JButton("按钮3");
btn4 = new JButton("按钮4");
btn5 = new JButton("按钮5");
//将按钮放置到面板中指定位置
p.add(btn1, BorderLayout.EAST);
p.add(btn2, BorderLayout.SOUTH);
p.add(btn3, BorderLayout.NORTH);
p.add(btn4, BorderLayout.WEST);
p.add(btn5, BorderLayout.CENTER);
//将面板添加到窗体中
this.add(p);
//设置窗口大小
this.setSize(400, 300);
//设置窗口左上角坐标
this.setLocation(200, 100);
//设置窗口关闭方式
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口可见
this.setVisible(true);
}
public static void main(String[] args) {
new BorderLayoutDemo();
}
}
2.3 GridLayout网格布局
●GridLayout网格布局, 将容器按照行和列分割成单元格
●GridLayout类提供 了两个构造方法
GridLayout(int rows,int cols)
GridLayout(int rows,int cols,int hgap,int vgap)
GridLayout网格布局案例
import javax.swing.*;
import java.awt.*;
public class GridLayoutDemo extends JFrame {
private JPanel p;
//声明按钮数组
private JButton[] btns;
public GridLayoutDemo() {
super("网格布局");
//创建一个2行3列的网格布局管理器对象,并将该布局设置到面板中
p = new JPanel(new GridLayout(2, 3));
//实例化按钮数组长度
btns = new JButton[6];
//循环实例化数组中每个按钮对象
for (int i = 0; i < btns.length; i++) {
btns[i] = new JButton("按钮 " + (i + 1));
}
//循环将数组中的按钮添加到面板中
for (int i = 0; i < btns.length; i++) {
p.add(btns[i]);
}
//将面板添加至窗体中
this.add(p);
//设置窗口大小
this.setSize(400, 300);
//设置窗口左上角坐标
this.setLocation(200, 100);
//设置窗口关闭方式
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口可见
this.setVisible(true);
}
public static void main(String[] args) {
new GridLayoutDemo();
}
}
2.4 CardLayout卡片布局
●CardLayout卡片布局将加入到容器中的组件看成一 叠卡片,每次只能看见最上面的组件
CardLayout卡片布局案例
import javax.swing.*;
import java.awt.*;
public class CardLayoutDemo extends JFrame {
private JPanel p;
//声明按钮数组
private JButton[] btns;
//声明卡片布局管理器
private CardLayout c1;
public CardLayoutDemo() {
super("CardLayout卡片布局");
//实例化卡片布局管理器对象
c1 = new CardLayout();
//实例化面板对象,其布局为卡片布局
p = new JPanel(c1);
//实例化按钮数组长度
btns = new JButton[6];
//循环实例化数组中的每个按钮对象
for (int i = 0; i < btns.length; i++) {
btns[i] = new JButton("按钮 " + (i + 1));
}
//循环将数组中的按钮添加到面板中
for (int i = 0; i < btns.length; i++) {
p.add("第" + (i + 1) + "张", btns[i]);
}
//将面板添加到窗体中
this.add(p);
//显示最后一张卡片
// c1.last(p);
//显示名称为”第3张“的卡片
c1.show(p, "第3张");
//设置窗口大小
this.setSize(300, 200);
//设置窗口左上角坐标
this.setLocation(200, 100);
//设置窗口关闭方式
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口可见
this.setVisible(true);
}
public static void main(String[] args) {
new CardLayoutDemo();
}
}
2.5 BoxLayout盒布局
BoxLayout盒布局案例
import javax.swing.*;
import java.awt.*;
public class BoxLayoutDemo extends JFrame {
private JPanel p;
//声明按钮数组
private JButton[] btns;
public BoxLayoutDemo() {
super("BoxLayoutDemo盒布局");
//实例面板对象
p = new JPanel();
//设置面板布局为盒布局
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
//实例化按钮数组长度
btns = new JButton[6];
//循环实例化数组中每个按钮对象
for (int i = 0; i < btns.length; i++) {
btns[i] = new JButton("按钮 " + (i + 1));
}
//循环将数组中的按钮添加到面板中
for (int i = 0; i < btns.length; i++) {
p.add(btns[i]);
}
//将面板添加至窗体中
this.add(p);
//设置窗口大小
this.setSize(300, 300);
//设置窗口左上角坐标
this.setLocation(200, 100);
//设置窗口关闭方式
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口可见
this.setVisible(true);
}
public static void main(String[] args) {
new BoxLayoutDemo();
}
}
2.6 NULL空布局
空布局指容器不采用任何布局,通过每个组件的绝对定位进行布局
NULL空布局案例
import javax.swing.*;
public class NullDemo extends JFrame {
//声明一个面板对象
private JPanel p;
//声明两个按钮对象
private JButton btnOk, btnCancel;
public NullDemo() {
super("Null空布局");
p = new JPanel();
//设置面板布局为空
p.setLayout(null);
//创建按钮
btnOk = new JButton("确认");
btnCancel = new JButton("取消");
//调用setBounds设置按钮的坐标和大小
btnOk.setBounds(30, 60, 60, 25);
//调用setLocation设置按钮的坐标
btnCancel.setLocation(100, 60);
//调用setSize设置按钮的大小
btnCancel.setSize(60, 25);
//将按钮添加到面板
p.add(btnCancel);
p.add(btnOk);
//将面板添加至窗体中
this.add(p);
//设置窗口大小
this.setSize(300, 300);
//设置窗口左上角坐标
this.setLocation(200, 100);
//设置窗口关闭方式
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口可见
this.setVisible(true);
}
public static void main(String[] args) {
new NullDemo();
}
}