java图形界面之JPanel面板与布局管理

本文详细介绍了Swing中常见的布局管理器,包括流布局、边界布局、网格布局及绝对布局的特点与应用方法,并提供了丰富的代码示例。

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


JPanel面板

简介:面板也是一个Swing容器,它可以作为容器容纳其他组件,但它也必须被添加到其他容器中。
情景再现:

JFrame frame=new JFrame("JFrame窗体");	//创建一个窗体
JPanel panel=new JPanel();				//创建面板
JButton button=new JButton("戳这里");	//创建按钮
panel.add(button);	//将按钮添加到面板上
frame.add(panel);	//将panel面板放到窗体中
					//快看面板必须添加到其他容器中
//设置窗口属性
frame.setSize(300,200);		//设置窗口大小
frame.setLocation(700,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);		//窗体可见

  • JPanel面板可以聚集一些组件来布局,懂我意思吧(¬‿¬)。 也就是说面板主要应用于布局的时候,当你希望自己设置的窗体布局规整有条理啥的,要想到面板哟👧🏻,还是很常用的。

常见布局管理器

( •̀ .̫ •́ )✧既然刚刚提到了布局那我们就一提到底吧😸

布局管理器就是用来布局界面的(好废话呀)
布局管理器通过布局管理类来对各种组件进行管理,当窗体发生变化时,它会根据新版面来适配窗口大小。
界面各组件摆放的效果会直接影响到读者阅读体验。可以推断它好重要o( ̄▽ ̄)ブ

流布局管理器(FlowLayout)

这是最基本的布局方式。默认情况下,组件在每一行都是居中排列的。但可改变呀。

FlowLayout类中常见的构造方法:

  • public FlowLayout()
  • public FlowLayout(int alignment)
  • public FlowLayout(int alignment,int horizGap,int vertGap)
  • 其中的alignment参数表示组件在每一行的具体摆放位置,例如:设为0时,每一行的组件将被指定按照左对齐排列。设为1,中间。设为2,右边。
  • horizGap与vertGap,分别以像素为单位指定组件间的水平与垂直间隔。
import java.awt.*;
import javax.swing.*;
public class csdn {
	public void test() {			//定义一个test方法
	JFrame frame=new JFrame("这是窗体的名字");		//建个窗体
	JButton button=new JButton("登录");		//建个按钮
	JLabel lable=new JLabel("这是一个JFrame窗口");	//建个Lable标签
	JPanel panel=new JPanel();		//来个面板
	
	panel.add(lable);		//面板里添加Lable
	panel.add(button);		//面板里添加按钮
	
	frame.getContentPane().add(panel);	//将窗体转换为容器再添加上面板
	frame.setLayout(new FlowLayout(0));//调用流布局,设为0时,每一行的组件将被指定按照左对齐排列
	//设置窗体可见
	frame.setVisible(true);
	}	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		csdn c= new csdn();
		c.test();
		
	}
}
/*最后显示的结果是文字和按钮都在左边
各路读者可以试试设其它数值看看效果呀*/

边界布局管理器(BorderLayout)

在默认不指定窗口布局时,Swing组件的布局模式就是边界布局。回望最初我们容器只添加一个标签组件时,细想,是否组件占据了整个页面,实际上在这个容器中默认使用了边界布局管理器。

  • 边界布局管理器将容器划分为东、南、西、北、中 5个区域,组件可加入到这五个区域中。
  • 容器调用Container类中的add()方法添加组件时可以设置此组件在边界布局管理器中的区域

各成员变量具体含义

  • BorderLayout类的主要成员变量
成员变量含义
BorderLayout.NORTH在容器中添加组件时,组件置于顶端
BorderLayout.SOUTH在容器中添加组件时,组件置于底端
BorderLayout.EAST在容器中添加组件时,组件置于右端
BorderLayout.WEST在容器中添加组件时,组件置于左端
BorderLayout.CENTER在容器中添加组件时,组件置于中间开始填充,直至与其他组件边界接触
import java.awt.*;

import javax.swing.*;
public class csdn {
	public void test() {		//定义一个test方法
	JFrame frame=new JFrame("这是窗体的名字");
	//设置五个按钮
	JButton button1=new JButton("东");
	JButton button2=new JButton("南");
	JButton button3=new JButton("西");
	JButton button4=new JButton("北");
	JButton button5=new JButton("中");
	//在容器中添加组件
	frame.add(button1, BorderLayout.EAST);
	frame.add(button2, BorderLayout.SOUTH);
	frame.add(button3, BorderLayout.WEST);
	frame.add(button4, BorderLayout.NORTH);
	frame.add(button5, BorderLayout.CENTER);
	设置关闭窗体结束应用程序
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setSize(400,400);			//设置窗体大小
	frame.setVisible(true);			//可视化窗体
	
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		csdn c= new csdn();
		c.test();
	}
}

网格布局管理器(GridLayout)

网格布局管理器将容器划分为网格,所以组件可以按照行和列进行排列。

  • 此布局中每个组件大小相同
  • 组件会按从左往右,由上而下的加入到网格中
  • 每个组件都会填满网格,改变窗体大小,组件大小也会随之改变。
两种主要构造方法:
  1. public GridLayout (int rows , int columns)
  2. public GridLayout (int rows , int columns , int horizGap , int vertGap)
  3. 参数horizGap与vertGap指定网格间的距离,前者指水平距离,后者指垂直距离
import java.awt.*;
import javax.swing.*;
public class csdn {
	public void test() {		//定义一个test方法
	JFrame frame=new JFrame("这是窗体的名字");
	//创建5个按钮
	JButton button1=new JButton("1");
	JButton button2=new JButton("2");
	JButton button3=new JButton("3");
	JButton button4=new JButton("4");
	JButton button5=new JButton("5");
	
	frame.setLayout(new GridLayout(2,3,5,5));//设置2行3列网格
	
	frame.add(button1);
	frame.add(button2);
	frame.add(button3);
	frame.add(button4);
	frame.add(button5);
	
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗体结束应用程序
	frame.setSize(400,400);
	frame.setVisible(true);
	
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		csdn c= new csdn();
		c.test();
	}
}
/*注意观察
我这个例子设置了5个按钮
最初定义了2行3列的网格
但是由于组件不够
所以只显示6个格子
其中一个是空格
也就是说无论如何都会显示为矩形,
但如果我们将2行3列改为3行3列
我们会发现,界面显示的是3行2列
所以通过测试我们知道网格布局先满足行数再满足列数
  • 网格布局先满足行数再满足列数

绝对布局

绝对布局可硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式来指定组件的位置。

使用绝对布局的步骤如下:

  • 使用Container.setLayout(null) 取消布局管理器
  • 使用Component.setBounds() 方法设置每个组件的大小位置
import java.awt.*;
import javax.swing.*;
public class csdn {
	public void test() {		//定义一个test方法
	JFrame frame=new JFrame("这是窗体的名字");
	//取消布局管理器
	frame.setLayout(null);
	//绝对定位窗体的位置和大小
	frame.setBounds(0,0,200,150); 
	//创建两个按钮	
	JButton button1=new JButton("1");
	JButton button2=new JButton("2");
	//绝对定位按钮的位置和按钮的大小
	button1.setBounds(10, 30, 80, 30);		
	button2.setBounds(60, 70, 100, 20);
	//将按钮添加到容器中
	frame.add(button1);
	frame.add(button2);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗体结束应用程序
	//设置窗体大小
	frame.setSize(400,400);
	//设置窗体可见
	frame.setVisible(true);
	
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		csdn c= new csdn();
		c.test();
	}
}

感谢阅读(❁´◡`❁)
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值