JAVA基础之Swing窗体的几种布局

本文介绍了JavaAWT/Swing框架中的BorderLayout、FlowLayout、GridLayout和GridBagLayout四种布局管理器,通过示例展示了如何在JFrame和JPanel中运用这些布局策略来组织和定位组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值