1、边框布局BorderLayout
特点:5个方位(东(East)南(north)西(west)北(south)中(center))
是一种简单的布局策略。
使用时,应将其看成一个“组件”。
同样,首先应通过构造器创建布局管理器对象,再通过引用其中的方法和变量来对组件进行布局。 表
2.2 BorderLayout布局管理器的构造器
书写案例:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class LayoutDemo3 extends JFrame{
//要求:实例化对象操作放在类的里面,方法的外面(目的:使该对象能够具有最大权限化)
//1.实例化一个JPanel容器
private JPanel jpa = new JPanel();
//实例化一个边框布局的对象
private BorderLayout bl = new BorderLayout();
//按钮
private JButton jba = new JButton("菠萝");
private JButton jbb = new JButton("香蕉");
private JButton jbc = new JButton("香橙");
private JButton jbd = new JButton("香瓜");
private JButton jbe = new JButton("西瓜");
public LayoutDemo3() {
this.setTitle("布局案例");
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//设置容器的布局方式----边框布局
jpa.setLayout(bl);
jpa.add(jba,"North");
jpa.add(jbb,BorderLayout.SOUTH);
jpa.add(jbc,BorderLayout.EAST);
jpa.add(jbd,BorderLayout.WEST);
jpa.add(jbe,BorderLayout.CENTER);
//2.将容器添加到窗体面板上
this.getContentPane().add(jpa);
this.setVisible(true);
}
}
2.FlowLayout流式布局
特点:加入空间默认居中显示,如果再次加入,从左往右扩充,一行显示不了,会跨行默认中间显示
书写案例:
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class LayoutDemo extends JFrame{
//要求:实例化对象操作放在类的里面,方法的外面(目的:使该对象能够具有最大权限化)
//1.实例化一个JPanel容器
private JPanel jpa = new JPanel();
//private JPanel jpb = new JPanel();
//实例化一个流式布局的对象
private FlowLayout fl = new FlowLayout();
//按钮
private JButton jba = new JButton("我是按钮1");
private JButton jbb = new JButton("我是按钮2");
private JButton jbc = new JButton("我是按钮3");
private JButton jbd = new JButton("我是按钮4");
private JButton jbe = new JButton("我是按钮5");
public LayoutDemo() {
this.setTitle("布局案例");
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//设置2个容器的背景颜色
jpa.setBackground(Color.pink);
//jpa.setSize(400, 200);
//jpb.setBackground(Color.green);
//设置jpa容器的布局方式----流式布局
jpa.setLayout(fl);
jpa.add(jba);
jpa.add(jbb);
jpa.add(jbc);
jpa.add(jbd);
jpa.add(jbe);
//2.将容器添加到窗体面板上
this.getContentPane().add(jpa);
//this.getContentPane().add(jpb);
this.setVisible(true);
}
}
BorderLayout和FlowLayout结合方法
所有组件均“依次排列,没有如同BorderLayout布局管理器那样有5个不同的方位。
可以将BorderLayout布局管理器和FlowLayout布局管理器相结合给出一个实例。
思路:将FlowLayout布局管理器同顶层容器关联,然后在其中添加5个BorderLayout布局管理器,并在这5个布局管理器中添加组件。
◆ 代码主要是将FlowLayout布局管理器同顶层容器相关联, 然后再在其中添加5个布局管理器的内容面板;
◆ 为每一个内容面板添加5个组件,并按照BorderLayout布 局管理方式排列组件。
图像大致为:
3.GridLayout网格布局
特点:类似Excel表格,几行几列(实例化时,2个参数)
布局管理器类似“围棋盘”,将整个布局空间划分成若干行列相乘的“网格区域”,组件就位于这些小区域内。
要创建一个GridLayout布局管理器,必须通过其构造器来创建GridLayout布局管理器对象。
样式
GridLayout、BorderLayout、FlowLayout布局管理器相结合进行组件布局的方法
思路:用GridLayout布局管理器与顶层窗口关联,在这个布局管理器中添加FlowLayout布局管理器和BorderLayout布局管理器,最后在这些布局管理器中添加控件。
◆ 首先,用GirdLayout布局管理器与顶层窗口关联;
◆ 其次,在GridLayout中添加FlowLayout布局管理器和BorderLayout布局管理器;
◆ 最后,在这些(Flow&Border)布局管理器中添加控件。
书写案例:
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class LayoutDemo2 extends JFrame{
//要求:实例化对象操作放在类的里面,方法的外面(目的:使该对象能够具有最大权限化)
//1.实例化一个JPanel容器
private JPanel jpa = new JPanel();
//实例化一个网格布局的对象
private GridLayout gl = new GridLayout(3, 3);
//按钮
private JButton jba = new JButton("菠萝");
private JButton jbb = new JButton("香蕉");
private JButton jbc = new JButton("香橙");
private JButton jbd = new JButton("香瓜");
private JButton jbe = new JButton("西瓜");
private JButton jbf = new JButton("哈密瓜");
private JButton jbg = new JButton("榴莲");
private JButton jbh = new JButton("百香果");
private JButton jbi = new JButton("黑凤梨");
public LayoutDemo2() {
this.setTitle("布局案例");
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//设置容器的布局方式----网格布局
jpa.setLayout(gl);
jpa.add(jba);
jpa.add(jbb);
jpa.add(jbc);
jpa.add(jbd);
jpa.add(jbe);
jpa.add(jbf);
jpa.add(jbg);
jpa.add(jbh);
jpa.add(jbi);
//2.将容器添加到窗体面板上
this.getContentPane().add(jpa);
this.setVisible(true);
}
}
4.GridBagLayout网袋布局
特点:根据坐标设置控件的位置
◆ 网格包由多个网格组成,且各行、列的长度和宽度不同。但在默认情 况下,单元格从左上角开始有序列编号,从第0行、第0列开始计数。
◆ 当向GridBagLayout中添加组件时,需分别定义每个单元格的序列号, 只要设定相应的值,组件就会添加到网格包布局管理器中。
◆ 组件被添加到什么位置有4个参数,分别是gridX、gridY、gridwidth 、gridheight。
其中:gridX、gridY---定义添加组件时左上角的行与列的位置;
gridwidth、gridheight---定义组件所占用的列数和行数。
书写案例:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class LayoutDemo4 extends JFrame {
// 1.实例化一个JPanel容器
private JPanel jpa = new JPanel();
// 实例化一个网袋布局对象
private GridBagLayout gbl = new GridBagLayout();
// 注意:网袋布局对象不能直接设置坐标,而是根据网袋布局的约束对象去约束(设置)控件的坐标
// 实例化网袋布局约束对象
private GridBagConstraints gbc = new GridBagConstraints();
// 账号文本标签对象
private JLabel jla = new JLabel("账号");
// 普通文本输入框
private JTextField jtfa = new JTextField(15);
// 密码文本标签对象
private JLabel jlb = new JLabel("密码");
// 密码文本框对象
private JPasswordField jpfa = new JPasswordField(15);
public LayoutDemo4() {
this.setTitle("布局案例");
this.setSize(400, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
// 设置容器的布局方式(网袋布局)
jpa.setLayout(gbl);
// 设置账号的文本标签坐标
gbc.gridx = 0;
gbc.gridy = 0;
// 将该坐标设置给JLabel账号标签
gbl.setConstraints(jla, gbc);
// 将设置好的jla添加到容器中
jpa.add(jla);
// 设置普通文本框的坐标(jtfa)
gbc.gridx = 1;
gbc.gridy = 0;
// 将该坐标设置给jtfa文本框对象
gbl.setConstraints(jtfa, gbc);
// 将设置好的jtfa组件添加到容器中
jpa.add(jtfa);
// 设置密码文本框的坐标(jlb)
gbc.gridx = 0;
gbc.gridy = 1;
// 将该坐标设置给jlb密码文本框对象
gbl.setConstraints(jlb, gbc);
// 将设置好的jlb组件添加到容器中
jpa.add(jlb);
// 设置密码文本框的坐标(jpfa)
gbc.gridx = 1;
gbc.gridy = 1;
// 将该坐标设置给jpfa密码文本框对象
gbl.setConstraints(jpfa, gbc);
// 将设置好的jpfa组件添加到容器中
jpa.add(jpfa);
// 2.将容器添加到窗体面板上
this.getContentPane().add(jpa);
this.setVisible(true);
}
}