Java中swing的5种布局方式浅析

news2024/11/19 11:31:02

在一个传统的java项目中,遇到一个需要调整布局的需求,下面将学习网上大佬的文章,并将过程记录下来。

1、Java swing5种布局方式

  • 1、 边界布局(BorderLayout)
  • 2、流式布局(FlowLayout)
  • 3、网格布局(GridLayout)
  • 4、盒子布局(BoxLaYout)
  • 5、空布局(null)
    还有其他两种布局,分别是GridBagLayout(网格包布局)、CardLayout(卡片布局)。
    注意:JFrame和JDialog默认布局为BorderLayout,JPanel和Applet默认布局为FlowLayout。

2、边界布局BorderLayout

实例如下

public class BorderLayoutExample extends JFrame {
    JButton btn1=new JButton("东");
    JButton btn2=new JButton("南");
    JButton btn3=new JButton("西");
    JButton btn4=new JButton("北");
    JButton btn5=new JButton("中");
    BorderLayoutExample(){
        init();
        this.setTitle("边界布局");
        this.setResizable(true);
        this.setSize(300, 300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    void init(){
        this.setLayout(new BorderLayout(10,5)); //默认为0,0;水平间距10,垂直间距5
        this.add(btn1,BorderLayout.EAST);
        this.add(btn2,BorderLayout.SOUTH);
        this.add(btn3,BorderLayout.WEST);
        this.add(btn4,BorderLayout.NORTH);
        this.add(btn5,BorderLayout.CENTER);
    }
    public static void main(String args[]){
        new BorderLayoutExample();
    }
}

运行结果如下
在这里插入图片描述

3、流式布局FlowLayout

实例如下

public class FlowLayoutExample extends JFrame {
    JButton btn1=new JButton("one");
    JButton btn2=new JButton("two");
    JButton btn3=new JButton("three");
    JButton btn4=new JButton("four");
    JButton btn5=new JButton("five");
    FlowLayoutExample(){
        init();
        this.setTitle("流式布局");
        this.setResizable(true);
        this.setSize(300, 300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    void init(){
        this.setLayout(new FlowLayout(FlowLayout.LEFT,10,5)); //默认为居中;水平间距10,垂直间距5
        this.add(btn1);
        this.add(btn2);
        this.add(btn3);
        this.add(btn4);
        this.add(btn5);
    }
    public static void main(String args[]){
        new FlowLayoutExample();
    }
}

运行结果如下
在这里插入图片描述

4、网格布局GridLayout

实例如下

public class GridLayoutExample extends JFrame {
    JButton btn1=new JButton("one");
    JButton btn2=new JButton("two");
    JButton btn3=new JButton("three");
    JButton btn4=new JButton("four");
    JButton btn5=new JButton("five");
    GridLayoutExample(){
        init();
        this.setTitle("表格布局");
        this.setResizable(true);
        this.setSize(300, 300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    void init(){
        this.setLayout(new GridLayout(2,3,10,5)); //默认为1行,n列;2行3列,水平间距10,垂直间距5
        this.add(btn1);
        this.add(btn2);
        this.add(btn3);
        this.add(btn4);
        this.add(btn5);
    }
    public static void main(String args[]){
        new GridLayoutExample();
    }
}

运行结果如下
在这里插入图片描述

5、盒子布局BoxLaYout

实例如下

public class BoxLayoutExample extends JFrame {
    JButton btn1=new JButton("one");
    JButton btn2=new JButton("two");
    JButton btn3=new JButton("three");
    JButton btn4=new JButton("four");
    JButton btn5=new JButton("five");
    BoxLayoutExample(){
        init();
        this.setTitle("表格布局");
        this.setResizable(true);
        this.setSize(300, 300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    void init(){
        this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.X_AXIS));
        //可以使用Box容器代替
        //Box box = new Box(BoxLayout.Y_AXIS);box.add(btn...);box.add(creat..);
        this.add(btn1);
        this.add(btn2);
        this.getContentPane().add(Box.createHorizontalStrut(10)); //采用x布局时,添加固定宽度组件隔开
        //this.getContentPane().add(Box.createVerticalStrut(5)); //采用y布局时,添加固定高度组件隔开
        this.add(btn3);
        this.add(btn4);
        this.add(btn5);
    }
    public static void main(String args[]){
        new BoxLayoutExample();
    }
}

运行结果如下在这里插入图片描述

6、空布局null

实例如下

public class NullLayoutExample extends JFrame {
    JButton btn1=new JButton("one");
    JButton btn2=new JButton("two");
    JButton btn3=new JButton("three");
    JButton btn4=new JButton("four");
    JButton btn5=new JButton("five");
    NullLayoutExample(){
        init();
        this.setTitle("空布局");
        this.setResizable(true);
        this.setSize(300, 300);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    void init(){
        this.setLayout(null);
        btn1.setBounds(10, 0, 100, 50); //x坐标10,y坐标0,组件宽100,高50
        btn2.setBounds(20, 50, 100, 50);
        btn3.setBounds(30, 100, 100, 50);
        btn4.setBounds(40, 150, 100, 50);
        btn5.setBounds(50, 200, 100, 50);
        this.add(btn1);
        this.add(btn2);
        this.add(btn3);
        this.add(btn4);
        this.add(btn5);
    }
    public static void main(String args[]){
        new NullLayoutExample();
    }
}

运行结果如下
在这里插入图片描述
注:感兴趣的小伙伴可以试试可以直接运行

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

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

相关文章

Quartz 建表语句SQL文件

SQL文件在jar里面,github下载 https://github.com/quartz-scheduler/quartz/releases/tag/v2.3.2 解压,sql文件路径:quartz-core\src\main\resources\org\quartz\impl\jdbcjobstore tables_mysql_innodb.sql # # In your Quartz propertie…

yo!这里是c++中的多态

前言 在学完继承之后,紧接着我们来认识多态,建议继承不太熟的先把继承部分的知识点搞熟,再来学习多态,否则会走火入魔,会混乱。因为多态是建立在继承的基础之上,而且多态中还存在与继承类似的概念&#xff…

大数据学习1.3-xShell配置jdk

1.创建java文件 mkdir /usr/local/java 2.切换到java中 cd /user/local/java/ 3.将jdk直接拖到xShell中 4.解压jdk tar -zxvf jdk-8u221-linux-x64.tar.gz 5.配置环境变量-进入环境变量文件 vi /etc/profile 6.添加如下内容 JAVA_HOME/usr/local/java/jdk1.8.0_221 CLASSP…

【方案】浅析利用AI智能识别与视频监控技术打造智慧水产养殖监管系统

一、方案背景 针对目前水产养殖集约、高产、高效、生态、安全的发展需求,基于智能传感、智慧物联网、人工智能、视频监控等技术打造智慧水产系统,成为当前行业的发展趋势。传统的人工观察水产养殖方式较为单一,难以及时发现人员非法入侵、偷…

树莓派提示不认识GPIO

有的板子可能不会安装wiringpi库,在运行下面指令式 gpio readall 会报如下错 即使运行版本查看指令也是这个错误 gpio -v 目前最新版是2.52版 先更新软件源 ,再安装wiringpi库 sudo apt-get update sudo apt-get upgrade sudo apt-get install wi…

Flink的部署模式:Local模式、Standalone模式、Flink On Yarn模式

Flink常见的部署模式 Flink部署、执行模式Flink的部署模式Flink的执行模式 Local本地模式下载安装启动、停止Flink提交测试任务停止作业 Standalone独立模式会话模式单作业模式应用模式 YARN运行模式会话模式启动Hadoop集群申请一个YARN会话查看Yarn、Flink提交作业查看、测试作…

Centos7安装mysql详细过程

官网 https://dev.mysql.com/downloads/repo/yum/1、下载安装包 cd /optwget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm2、安装MYSQL源 yum -y install mysql57-community-release-el7-11.noarch.rpm3、查看安装结果 yum repolist enabled | …

C语言实现:删除链表倒数第k个元素

然后这里讲一下删倒数第k个元素的算法思想 我这里很简单啊,你要删倒数第k个,那不就是正数len-k1个吗 举个例子: 比如12345 删倒数第3个,就是删正数5-313,也就是正数第3个 删倒数第2个,就是删正数5-214&…

什么是 Sepolia 测试网以及如何从 Faucet 获取 Sepolia ETH

如何通过水龙头领取 Sepolia 测试网 ETH 代币 Sepolia 测试网需要 Sepolia ETH 代币来测试即将推出的 dApp,然后再在以太坊主网上线。您可以从 Alchemy、QuickNode 和 Infura 水龙头领取 Sepolia 测试网 ETH。 要点 您可以从官方水龙头和其他一些独立水龙头获取 S…

快速学习Netty

Netty框架探索:助力高效网络编程 一、Netty是个啥?二、“Hello World”服务器端实现(Server)客户端实现(Client)思考🤔 三、Netty的核心组件EventLoopChannelChannelPipelineChannelHandlerByte…

请实现一个函数,输入一个整数数组和一个目标值,在数组中找到两个数使得它们的和等于目标值。

今日份AI出笔试题: AI Golang笔试中级题目https://bs.rongapi.cn/1702565828114780160/23 完整题目: 请实现一个函数,输入一个整数数组和一个目标值,在数组中找到两个数使得它们的和等于目标值。函数应该返回这两个数的索引&am…

转载—Linux下文件搜索、查找、查看命令

Linux下文件搜索、查找、查看命令 1、最强大的搜索命令:find 查找各种文件的命令  2、在文件资料中查找文件:locate   3、搜索命令所在的目录及别名信息:which  4、搜索命令所在的目录及帮助文档路径:whereis 5、在文件中搜寻…

回收站文件恢复,这3个方法必须掌握!

“我是一名电脑小白,听说电脑中删除的文件会被放入回收站中,那么回收站里的文件应该怎么恢复呢?如果回收站被删除了,文件还有机会找回来吗?” 回收站作为电脑中一个功能强大的工具,对我们找回误删的数据有很…

数据结构-----树和二叉树的定义与性质

目录 前言 思维导图 一.树 树的定义 二.二叉树 1.二叉树的定义 2.二叉树的形态(图) 3.二叉树的性质 三.满二叉树 1.定义 2.特点和性质 四.完全二叉树 1.定义 2.特点和性质 前言 今天开始我们就学习新的数据结构类型啦!没错它就是…

Ribbon负载均衡器

两种: 1.1 集中式负载均衡,服务端负载均衡 硬件 nginx 轮询、负载、哈希、随机、权重 为什么要做负载均衡? 1.2 客户端负载均衡器 用客户端 负载均衡器 很多机制可以自定义 小知识:不想让别人调自己,只想用别人的…

2023-9-22 没有上司的舞会

题目链接&#xff1a;没有上司的舞会 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 6010;int n; int happy[N]; int h[N], e[N], ne[N], idx; bool has_father[N];// 两个状态&#xff0c;选该节点或不选该…

李航老师《统计学习方法》第2章阅读笔记

感知机&#xff08;perceptron&#xff09;时二类分类的线性分类模型&#xff0c;其输入为实例的特征向量&#xff0c;输出为实例的类别&#xff0c;取1和-1二值。感知机对应于输入空间&#xff08;特征空间&#xff09;中将实例划分为正负两类的分离超平面 想象一下在一个平面…

spring:实现初始化动态bean|获取对象型数组配置文件

0. 引言 近期因为要完成实现中间件的工具包组件&#xff0c;其中涉及要读取对象型的数组配置文件&#xff0c;并且还要将其加载为bean&#xff0c;因为使用了spring 4.3.25.RELEASE版本&#xff0c;很多springboot的相关特性无法支持&#xff0c;因此特此记录&#xff0c;以方…

阿里云服务器u1和经济型e实例有什么区别?

阿里云服务器经济型e实例和云服务器u1有什么区别&#xff1f;同CPU内存配置下云服务器u1性能更强&#xff0c;u1实例价格也要更贵一些。经济型e实例属于共享型云服务器&#xff0c;不同实例vCPU会争抢物理CPU资源&#xff0c;并导致高负载时计算性能波动不稳定&#xff0c;而云…

实时更新进度条:JavaScript中的定时器和异步编程技巧

前言 在Web开发中&#xff0c;有许多场景需要实时地更新页面上的进度&#xff0c;例如上传文件、数据处理等。本文将介绍如何利用JavaScript中的定时器和异步编程技巧来实现实时更新进度&#xff0c;并探讨一些其他解决方案。 处理进度实时更新&#xff1a; 利用异步编程实现实…