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

news2024/10/5 17:16:52
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);
	}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业项目组态用这个开源软件ScadaBR

软件介绍 ScadaBR 是一个开源软件,提供完整的 SCADA(Supervisory Control and Data Acquisition,监控与数据采集)系统的所有功能。SCADA 类型的软件自60年代末开始存在,并且在涉及机器、可编程逻辑控制器(P…

【Linux入门】基础开发工具

本篇博客整理了Linux(centOS版本)中基础开发工具的用途和用法,旨在透过开发工具的使用,帮助读者更好地理解可执行程序的编写、编译、运行等。 目录 一、软件包管理器 yum 1.软件的下载与安装 2.Linux应用商店:yum …

ElementUI从unpkg.com完整下载到本地的方法 - 解决unpkg.com不稳定的问题 - 自建镜像站 - 不想打包只想cdn一下

方法 方法1)随便弄个文件夹,根据官网npm方法下载包,提取即可 npm i element-ui -S cd /node_modules/element-ui/ ls src 安装npm方法:https://nodejs.org/en 方法2)不推荐 - 在github中搜索对应的库zip包&#xff0…

webpack基础---常用loader

webpack 命令式和配置文件 html-webpack-plugin 配置项:{ templete: filename: inject: } 清除上次打包的文件,output: { clear: true } mode选项: none development prodution souce-map:可以精准定位代码行数 { devt…

基于51单片机的交通灯设计—夜间、紧急、复位、可调时间、四个数码管显示

基于51单片机的交通灯设计 (仿真+程序+原理图+PCB+设计报告) 功能介绍 具体功能: 1、采用四方向数码管设计,更加符合真实的交通信号灯设计; 2、左侧按键从上到下依次…

VMware中安装Ubuntu死机 - 笔记

1VMware中安装Ubuntu,使用十几分钟后出现突然卡顿的情况怎么解决? VMware中安装Ubuntu,使用十几分钟后出现突然卡顿的情况怎么解决?_vmware上ubuntu卡-CSDN博客 其他情况 如果出现系统提示不支持该虚拟化,则打开“启…

深入教程:在STM32上实现能源管理系统

引言 能源管理系统(EMS)在提高能源效率、减少能源消耗和支持可持续发展方面起着关键作用。本教程将介绍如何在STM32微控制器上开发一个能源管理系统,这种系统能够监控和控制能源使用,适用于家庭自动化、工业控制系统以及任何需要…

Docker Compose如何安装

Docker Compose的安装通常依赖于你的操作系统。以下是在不同操作系统中安装Docker Compose的方法: Linux 系统 //下载最新版本的Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.1/docker-compose-$(uname -s)-$(un…

京东初级运营必修课程,从零开始学习(49节课)

课程内容: 01.1.全面解析店铺后台的各项功能 02.2.商品要素的重要性及如何打造黄金标题 03.3.手把手带你完成商品上架 04.4.为啥你的流量不转化-诸葛 05.5.怎么策划一张高点击率的照片 06.6.内功优化之数据化标题创建 07.7.内功优化之如何高转化活动落地页 …

【硬件模块】DHT11数字式温湿度传感器模块

前言 今天在这边新开一个系列,那就是硬件模块。 后续会把之前写过的硬件模块再写一遍,因为之前都是使用的STM32来驱动模块的,而现在我快速上手ESP32系列也快结束了,因此我在原本文章的基础上再加上使用ESP32来驱动的部分构成硬件…

傅里叶变换的推导过程-part1三角函数的正交性

1. 三角函数的正交性 1.0 提出问题 1.1 普通向量的正交 1.2 普通函数的正交 1.3 证明三角函数正交为0 1.3.1 cosnx.conmx = 0 , (m!=n) 1.3.2 cosmx.sinnx = 0 , s

【c++】继承学习(一):继承机制与基类派生类转换

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好,本篇文章我们来学习继承部分 目录 1.继承的概念和定义继承的定义继承基类成员的访问方式变化 2.基类和派生类对象赋值转换3.继承中的作用域 1.继承的概念和定义 …

JAVA 学习·泛型(二)——通配泛型

有关泛型的基本概念&#xff0c;参见我的前一篇博客 JAVA 学习泛型&#xff08;一&#xff09;。 协变性 泛型不具备协变性 在介绍通配泛型之前&#xff0c;先来看一下下面的例子。我们定义了一个泛型栈&#xff1a; import java.util.ArrayList; class GenericStack<E>…

python 11Pandas数据可视化实验

实验目的&#xff1a; 学会使用Pandas操作数据集&#xff0c;并进行可视化。 数据集描述&#xff1a; 该数据集是CNKI中与“中药毒理反应”相关的文献信息&#xff0c;包含文章题目、作者、来源&#xff08;出版社&#xff09;、摘要、发表时间等信息。 实验要求&#xff1…

建设智慧校园,让师生生活更便捷

在时代快速发展的大背景下&#xff0c;建设智慧校园是学校发展的要求&#xff0c;也是广大师生更加期待的。智慧校园建设是集教学、科研、管理、学习、生活为一体的高度智能化的学习生活环境。整合、整合、优化资源&#xff0c;提高工作、学习、科研效率&#xff0c;提高学校管…

java递归-(迷宫问题)

前面 这里我们来玩个有趣的事情&#xff0c;链接是0221_韩顺平Java_老鼠出迷宫1_哔哩哔哩_bilibili 我们要找的是小老鼠按路径走到右下点 要点 我们这里方法调用时对于引用类型&#xff1a;如java中引用数据类型有哪些&#xff1f;_java引用数据类型-CSDN博客 会共享引用类型…

室内定位:技术与应用

书籍&#xff1a;Indoor Positioning: Technologies and Performance 作者&#xff1a;Samama, Nel 出版&#xff1a;IEEE 书籍推荐-《室内定位&#xff1a;技术与应用》https://mp.weixin.qq.com/s/wcx9FvKQks-ja1wbEM5PJg 01 书籍介绍 本书提供了实现室内定位的各种方法…

huggingface里如何查看具体任务的评估指标

如果我们在做一个模型训练任务的时候&#xff0c;可能会不知道这个任务在评估的时候使用什么指标&#xff0c;那么huggingface里边为我们提供了参考&#xff1a; 下面就来看看吧&#xff1a; https://huggingface.co/https://huggingface.co/ 点击"Docs"&#xff…

Linux系统配置JAVA环境

一、jar包下载 官网:https://www.oracle.com/java/technologies/downloads 二、文件上传 上传到linux服务器 解压 下面是解压的路径 三、修改profile文件 修改etc下的profile文件&#xff0c;添加以下内容 vim /etc/profileexport JAVA_HOME/root/java/jdk-17.0.11 expo…

0.96寸OLED显示屏模块

一、OLED模块简介 名称&#xff1a;0.96寸OLED显示屏 组成&#xff1a;一块PCB板&#xff08;OLED的外围电路&#xff09;、屏幕、驱动芯片&#xff08;内嵌在屏幕下方&#xff09; 驱动芯片&#xff1a;SSD1306&#xff08;本篇是基于此芯片&#xff09; / SSD1315&#xf…