java:面板JPanel的使用

本文介绍了如何在Java Swing中使用JPanel创建面板,并详细讲解了如何添加边框、选择不同的布局管理器,包括边界布局、网格布局和流布局。通过实例代码展示了在面板中添加按钮并应用各种布局的实现过程,帮助读者理解Swing GUI组件的组织和设计。
摘要由CSDN通过智能技术生成

一、关键代码

(一)、新建面板

  • JPanel p_1=new JPanel();// 创建面板p_1
  • 上行代码需要在源码前段添加变量代码:import javax.swing.JPanel;// 面板

(二)、面板添加边框

  • p_1.setBorder(BorderFactory.createTitledBorder("面板p_1"));// 面板p_1添加边框
  • 上行代码说明:给面板p_1添加边框,标题名称“面板p_1”
  • 英语单词: Border(边框),Factory(工厂),create(创造),Titled(标题)

(三)、面板选择的布局方法

  • 边界布局,面板里建立边界布局,需要添加变量:import java.awt.BorderLayout
    p_1.setLayout(new BorderLayout());// 面板p_1建立布局,边界布局

  • 网格布局,面板李建立网格布局,需要添加变量:import java.awt.GridLayout
    p_2.setLayout(new GridLayout(5,1,20,5));// p_1建立布局,网格布局;行,列,水平间距,竖直间距

  • 流布局,面板建立流布局,需要在源码前面添加变量:import java.awt.FlowLayout;
    p_3.setLayout(new FlowLayout());// p_3建立布局,流布局

二、简单说明

源码的大致思想。先创建一个窗体f,设置好各种属性,如大小、坐标、是否可见、关闭方式等。然后创建一个容器c,容器c用于布置各种“按钮”等组件,以及排布方式。有时候窗体内布置组件需要分开处理布置,此时便可考虑使用面板了。使用面板先划分各面板处在窗体中的各位置。最后,面板里可以添加“按钮”等各种组件,选择不同的布局方法,不同的背景颜色等。各面板之间可以分别布置组件,互不打扰之模式。

  • 注意: 本博文网格布局运行效果需要注意的。“按钮”数÷行数=n,那么n+1变为列数,列数受手动设置数值的效果不大。具体可以看往期的网格布局的博文。

三、流程图

可以直接在容器c中添加“按钮”等各种构件,也可以在容器c添加面板p后,再在面板p里添加“按钮”等各种构件。添加面板p可以将窗体f分成多个区域,然后对各个区域分别进行构件、排布、尺寸等各属性的设计。

布局方法
布局方法
其他-容器
窗体
容器-举例
其他面板
面板-举例
其他-构件
按钮1-1
其他-构件
按钮2-1
坐标,尺寸,各属性

四、源码

(一)、源码A

  • 说明: 窗体f里添加容器c,容器c里添加4个面板,容器c使用网格布局来布置面板,分别设置不同的背景颜色。方法way1为窗体的主要属性。方法way2为添加各面板的各种属性。
/*
	JPanel面板
	
	步骤:
		1、窗体
		2、窗体里添加容器
		3、容器添加面板
		4、构件可以添加到“容器”中,也可以添加到“面板”里,
	显示效果不同。

		提醒:关于网格布局(GridLayout),行和列的关系说明
	可以看往期的“网格布局”的博文
*/

import java.awt.Container;// 容器
import java.awt.GridLayout;// 网格布局
import java.awt.Color;// 颜色
import java.awt.BorderLayout;// 边界布局
import java.awt.FlowLayout;// 流布局

import javax.swing.JFrame;// 窗体
import javax.swing.JPanel;// 面板
import javax.swing.BorderFactory;// 边框 工厂
import javax.swing.JButton;// 按钮

class Demo{
	JFrame f=new JFrame();// 新建窗体f
	
	Container c;// 新建“容器”c
	
	/*
		方法way2
		设置插入容器中面板的数量、属性
	*/
	void way2(){
	c=f.getContentPane();// 容器镶入窗体f中
	// 网格组布局(行数,列数,水平间距,垂直间距)
	c.setLayout(new GridLayout(2,2,20,30));// 容器c建立布局,网格布局
	

	/*
		面板p_1的属性
	*/
	JPanel p_1=new JPanel();// 创建面板p_1
	// Border(边框),Factory(工厂),create(创造),Titled(标题)
	p_1.setBorder(BorderFactory.createTitledBorder("面板p_1"));// 面板p_1添加边框
	p_1.setBackground(Color.pink);// 设置背景颜色

	c.add(p_1);// 面板p_1放于容器c中

	/*
		面板p_2的属性
	*/
	JPanel p_2=new JPanel();// 创建面板
	// Border(边框),Factory(工厂),create(创造),Titled(标题)
	p_2.setBorder(BorderFactory.createTitledBorder("面板p_2"));// 面板p_2添加边框
	p_2.setBackground(Color.GREEN);// 背景颜色

	c.add(p_2);// 面板p_2放于容器中

	/*
		面板p_3的属性
	*/
	JPanel p_3=new JPanel();// 创建面板
	// Border(边框),Factory(工厂),create(创造),Titled(标题)
	p_3.setBorder(BorderFactory.createTitledBorder("面板p_3"));// 面板p_3添加边框
	p_3.setBackground(Color.YELLOW);// 背景颜色

	c.add(p_3);// 面板p_3放于容器中
	
	/*
		面板p_4的属性
	*/
	JPanel p_4=new JPanel();// 创建面板
	// Border(边框),Factory(工厂),create(创造),Titled(标题)
	p_4.setBorder(BorderFactory.createTitledBorder("面板p_4"));// 面板p_4添加边框
	p_4.setBackground(Color.BLUE);// 背景颜色

	c.add(p_4);// 面板p_4放于容器中

	}

	/*
		方法way1
		设置窗体的属性
	*/
	void way1(){
		f.setSize(900,780);// 窗体f的尺寸

		// Location(位置),Relative(相对的),null则为居中(默认)
		f.setLocationRelativeTo(null);// 居中显示,null(空值)
		
		// Default(默认),Operration(操作),点×程序停止运行
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


	}

	public static void main(String[] args) {
		Demo d=new Demo();// 创建一个Demo类d,class后面的自命名
		d.way1();// 窗体属性
		d.way2();// 容器镶入窗体,设置面板属性

		d.f.setVisible(true);// 窗体可见
	}
}

(二)、源码A的运行效果

在这里插入图片描述

(三)、源码B

  • 说明: 在四个面板里添加“按钮”。分别使用边界布局、网格布局、流布局、绝对布局。具体的布局方法说明可以看往期的相关博文。
/*
	JPanel面板
	
	步骤:
		1、窗体
		2、窗体里添加容器
		3、容器添加面板
		4、构件可以添加到“容器”中,也可以添加到“面板”里,
	显示效果不同。

		提醒:关于网格布局(GridLayout),行和列的关系说明
	可以看往期的“网格布局”的博文
*/

import java.awt.Container;// 容器
import java.awt.GridLayout;// 网格布局
import java.awt.Color;// 颜色
import java.awt.BorderLayout;// 边界布局
import java.awt.FlowLayout;// 流布局

import javax.swing.JFrame;// 窗体
import javax.swing.JPanel;// 面板
import javax.swing.BorderFactory;// 边框 工厂
import javax.swing.JButton;// 按钮

class Demo{
	JFrame f=new JFrame();// 新建窗体f
	
	Container c;// 新建“容器”c
	
	/*
		方法way2
		设置插入容器中面板的数量、属性
	*/
	void way2(){
	c=f.getContentPane();// 容器镶入窗体f中
	// 网格组布局(行数,列数,水平间距,垂直间距)
	c.setLayout(new GridLayout(2,2,20,30));// 容器c建立布局,网格布局
	

	/*
		面板p_1的属性
	*/
	JPanel p_1=new JPanel();// 创建面板p_1
	p_1.setLayout(new BorderLayout());// 面板p_1建立布局,边界布局
	// Border(边框),Factory(工厂),create(创造),Titled(标题)
	p_1.setBorder(BorderFactory.createTitledBorder("面板p_1"));// 面板p_1添加边框
	p_1.setBackground(Color.pink);// 设置背景颜色

	p_1.add(new JButton("按钮-西"),BorderLayout.WEST);// 边界布局,西
	p_1.add(new JButton("按钮-东"),BorderLayout.EAST);// 边界布局,东,p_1
	p_1.add(new JButton("按钮-北"),BorderLayout.NORTH);// 边界布局,北
	p_1.add(new JButton("按钮-南"),BorderLayout.SOUTH);// 边界布局,南
	p_1.add(new JButton("按钮-中"),BorderLayout.CENTER);// 边界布局,中

	c.add(p_1);// 面板p_1放于容器c中

	/*
		面板p_2的属性
	*/
	JPanel p_2=new JPanel();// 创建面板
	p_2.setLayout(new GridLayout(5,1,20,5));// p_1建立布局,网格布局;行,列,水平间距,竖直间距
	// Border(边框),Factory(工厂),create(创造),Titled(标题)
	p_2.setBorder(BorderFactory.createTitledBorder("面板p_2"));// 面板p_2添加边框
	p_2.setBackground(Color.GREEN);// 背景颜色

		/*
			p_2里添加按钮
		*/
		for(int i=0;i<9;i++){
			p_2.add(new JButton("按钮"+i));
		}
	
	c.add(p_2);// 面板p_2放于容器中

	/*
		面板p_3的属性
	*/
	JPanel p_3=new JPanel();// 创建面板
	p_3.setLayout(new FlowLayout());// p_3建立布局,流布局,需要在前面添加import java.awt.FlowLayout;
	// Border(边框),Factory(工厂),create(创造),Titled(标题)
	p_3.setBorder(BorderFactory.createTitledBorder("面板p_3"));// 面板p_3添加边框
	p_3.setBackground(Color.YELLOW);// 背景颜色
	
		/*
			p_3里添加按钮
		*/
		for(int i_2=0;i_2<9;i_2++){
			p_3.add(new JButton("按钮"+i_2));
		}

	c.add(p_3);// 面板p_3放于容器中
	
	/*
		面板p_4的属性
	*/
	JPanel p_4=new JPanel();// 创建面板
	// Border(边框),Factory(工厂),create(创造),Titled(标题)
	p_4.setBorder(BorderFactory.createTitledBorder("面板p_4"));// 面板p_4添加边框
	p_4.setBackground(Color.BLUE);// 背景颜色

	p_4.setLayout(null);// 绝对布局
		JButton b_4=new JButton("按钮p_4");// 创建按钮
		b_4.setBounds(20,40,300,200);// 坐标,尺寸
		p_4.add(b_4);
	
	c.add(p_4);// 面板p_4放于容器中

	}

	/*
		方法way1
		设置窗体的属性
	*/
	void way1(){
		f.setSize(900,780);// 窗体f的尺寸

		// Location(位置),Relative(相对的),null则为居中(默认)
		f.setLocationRelativeTo(null);// 居中显示,null(空值)
		
		// Default(默认),Operration(操作),点×程序停止运行
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


	}

	public static void main(String[] args) {
		Demo d=new Demo();// 创建一个Demo类d,class后面的自命名
		d.way1();// 窗体属性
		d.way2();// 容器镶入窗体,设置面板属性

		d.f.setVisible(true);// 窗体可见
	}
}

(四)、源码B的运行效果

总源码的运行效果

五、定位日期

2022.3.23;19:31

  • 43
    点赞
  • 316
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值