• Swing程序设计(5)绝对布局,流布局


    文章目录


    前言

            Swing窗体中,每一个组件都有大小和具体的位置。而在容器中摆放各种组件时,很难判断其组件的具体位置和大小。即一个完整的界面中,往往有多个组件,那么如何将这些组件按照一定顺序进行摆放?这时就要用到“布局管理器”了,相比于程序员直接在容器中控制Swing组件的位置和大小,这个更加简单。


    一、布局管理器

            布局管理器:提供了安排、展示在容器中的方法及基本的布局功能,可以更有效地处理整个窗体中各个组件的布局。

            Swing程序中常用布局管理器:绝对布局、流布局、边界布局、网格布局、网格组布局等。

    二、介绍

    1.绝对布局

            绝对布局:指定组件在容器中的位置和大小,使用绝对坐标的方式指定组件的位置。即确定组件在窗体中的绝对位置,即使不显示,也不会随着窗体的改变而改变位置。

            使用步骤:

                    (1)使用 setLayout(null) 方法,取消任务管理器

                    (2)使用 setBounds() 方法,设置每个组件的大小和位置

            项目介绍:

                    输出要求:设置绝对布局,在一个窗体中展示一个男孩和一个女孩的图像

            实例展示:

    1. import javax.swing.*;
    2. import java.awt.*;
    3. //导入swing包,awt包
    4. import java.net.URL;
    5. //导入net包
    6. public class Demo extends JFrame {
    7. public Demo(){
    8. c.setLayout(null);
    9. //设定布局方式为:null 即为绝对布局
    10. setBounds(100, 100, 500, 500);
    11. //设置窗体的大小,生成范围
    12. setDefaultCloseOperation(EXIT_ON_CLOSE);
    13. //设置窗体的关闭方式
    14. Container c = getContentPane();
    15. //获取窗体容器
    16. URL url1 = Demo.class.getResource("boy.png");
    17. URL url2 = Demo.class.getResource("girl.png");
    18. //获取两张照片的url路径对象
    19. Icon icon1 = new ImageIcon(url1);
    20. Icon icon2 = new ImageIcon(url2);
    21. //ImageIcon()方法,实例化Icon接口,转换为图标对象
    22. JLabel jl1 = new JLabel(icon1);
    23. JLabel jl2 = new JLabel(icon2);
    24. //实例化两个JLabel标签对象,同时设置好图标对象
    25. jl1.setBounds( 217, 10, 213, 318);
    26. jl2.setBounds(2, 10, 213, 318);
    27. //设置两个标签对象的绝对布局位置,以及自身大小
    28. c.add(jl1);
    29. c.add(jl2);
    30. //将两个标签对象添加至容器中
    31. setVisible(true);
    32. }
    33. public static void main(String[] args) {
    34. new Demo();
    35. }
    36. }

         运行结果:
     

    什么?看不得一男一女在一块?好吧,我重新设置一下两张图片的绝对布局参数 

            以上两张图像的布局都是绝对,所以无论怎么用鼠标改变窗体的大小,这两张照片也不会改变摆放的位置。 

    2.流布局

            流布局:所有组件都会像流水一样,从左到右摆放组件,直到占据这一行的所有空间,然后再在下一行进行摆放。

            常用的构造方法:

    1. new FlowLayout();
    2. //创建流布局对象
    3. new FlowLayout(int alignment);
    4. /*
    5. 创建流布局对象,可以设置对齐排列位置,然后进行流布局
    6. FlowLayout.LEFT = 0; 填 0 即为左对齐流排列
    7. FlowLayout.CENTER = 1; 填 1 即为居中对齐流排列
    8. FlowLayout.RIGHT = 2; 填 2 即为右对齐流排列
    9. */
    10. new FlowLayout(int alignment,int horizGap,int vertGao);
    11. /*
    12. 创建流布局对象,可以设置对齐排列位置,然后进行流布局,
    13. 并且设置各个组件之间的水平间隔与垂直间隔
    14. */

             实例展示:

    1. import java.awt.Button;
    2. import java.awt.Container;
    3. import java.awt.FlowLayout;
    4. import javax.swing.*;
    5. //导入 swing,awt包
    6. public class Layout extends JFrame{
    7. //创建窗体,继承JFrame类
    8. public Layout(){
    9. //创建构造方法
    10. setTitle("流布局管理器");
    11. //创建窗体标题
    12. Container c = getContentPane();
    13. //获取窗体容器
    14. setLayout(new FlowLayout(1,10, 10));
    15. //设置布局管理器,居中对齐流布局,水平间距10像素,垂直间距10像素
    16. for(int i=1;i<11;i++){
    17. c.add(new Button("Button"+i));
    18. //在容器中添加按钮组件
    19. }
    20. setBounds(200,200,800,800);
    21. //设置窗体的大小和生成位置
    22. setVisible(true);
    23. //设置窗体可见
    24. setDefaultCloseOperation(EXIT_ON_CLOSE);
    25. //设置窗体的关闭方式
    26. }
    27. public static void main(String[] args) {
    28. new Layout();
    29. }
    30. }

            输出结果: 

    用鼠标改变窗体大小几次: 

     

            由此可见,流布局管理器的排序方式如同流水一样,随着窗体大小的改变,全部组件像流水一样,从高处流向低处,挨个排下来,只不过该代码中设置的是居中对齐。  


    总结

            本文仅仅简单介绍了布局管理器的使用,而Swing程序提供了许多能使我们快速便捷地处理组件布局的函数和方法,该文介绍了绝对布局流布局

            国庆期间,祝大家国庆快乐了,在享受假期的同时,不时要眺望远方,不要忘记人生旅途的方向。星星之火的我们的航标不偏移,祖国的巨轮也会更加安心行驶。

  • 相关阅读:
    Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析
    【极速审稿】物联网传感器类SCI&EI,仅17天录用,计算机领域SCI快刊盘点
    【Java面试】简单说一下你对序列化和反序列化的理解
    大模型、实时需求推动湖仓平台走向开放
    如何使用前端绘图库(D3.js、Chart.js等)?
    Python程序设计实战教程(持续学习中)
    深度学习——(生成模型)DDPM
    学习spring源码的意义是什么呢?有什么高效的源码学习方式吗?
    「 程序员的理财与风险控制」意外险:花几十块就能让你不用担心明天和意外哪个先来
    day 1 704 二分查找、27 移除元素 3de10a93119644fab12fdc47cbff2d1d
  • 原文地址:https://blog.csdn.net/weixin_74141222/article/details/133589916