likes
comments
collection
share

从组件到布局,深入理解Java GUI编程布局管理器🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂

作者站长头像
站长
· 阅读数 40

从组件到布局,深入理解Java GUI编程布局管理器🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂

  咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

上期回顾:GUI编程-组件

  在上一篇文章中,我们详细介绍了Java GUI编程中的常用组件,包括按钮(JButton)、标签(JLabel)、文本框(JTextField)、文本区域(JTextArea)、复选框(JCheckBox)、单选按钮(JRadioButton)等。通过实际代码示例,我们演示了如何创建和使用这些组件,并讨论了每种组件的适用场景和配置方法。

  我们还探讨了如何组合这些组件以创建复杂的用户界面,并介绍了一些常用的组件属性,如文本、颜色、字体等。通过学习组件的基本用法,相信大家已经掌握了如何在Java中创建功能丰富且美观的用户界面。再通过实际代码示例,我们展示了如何创建和配置这些组件,并介绍了如何将它们组合在一起,构建功能强大且用户友好的界面。

  然而,组件的有效布局是创建一个良好用户界面的关键。在上期内容中,虽然我们讨论了如何使用组件,但我们并未深入探讨如何将这些组件以合理的方式排列在窗体中。这就引出了本期内容——布局管理器

前言

从组件到布局:布局管理器的重要性

  组件本身是GUI编程的基础,但如何将这些组件组织成一个合理、美观的界面却依赖于布局管理器。在实际开发中,仅仅堆叠组件是不够的,我们还需要考虑组件的排列方式、空间分布、对齐方式等。这些都需要通过布局管理器来实现。

  布局管理器是Java中用于管理组件在容器(如JFrame、JPanel)中排列的工具。它决定了组件的摆放方式以及它们在窗口中的大小调整行为。掌握布局管理器的使用不仅可以让你的界面更加美观,还可以提高用户体验。

  在本期内容中,我们将全面介绍Java中的几种常见布局管理器,讨论它们的使用方法和适用场景。通过对这些布局管理器的深入学习,你将能够创建出更专业、结构更加合理的Java桌面应用程序。

摘要

  本文主要讨论Java GUI编程中的布局管理器,包括其基本概念、常用布局管理器的特点、核心源码解读、应用场景演示、优缺点分析、以及相关代码的测试和结果分析。通过阅读本文,大家可以全面了解布局管理器在Java GUI编程中的重要性,并能够在实际开发中灵活应用。

正文

简介

  Java提供了丰富的图形用户界面(GUI)组件,通过这些组件,开发者可以创建出功能强大且用户体验友好的桌面应用程序。在GUI编程中,布局管理器(Layout Manager)是一个非常重要的概念。布局管理器决定了GUI组件在容器中的排列方式。本文将详细介绍Java中几种常见的布局管理器,并通过代码示例进行讲解。

概述

  布局管理器是Java中用于控制组件在容器(如JFrame、JPanel等)中排列方式的对象。常见的布局管理器包括:

  • FlowLayout:按从左到右、从上到下的顺序排列组件。
  • BorderLayout:将容器划分为东、南、西、北、中五个区域,组件按区域添加。
  • GridLayout:将容器划分为网格,每个组件占据一个网格单元。
  • GridBagLayout:提供了更为灵活的网格布局方式,允许组件跨行跨列。
  • BoxLayout:按水平或垂直方向排列组件。

核心源码解读

以最常用的FlowLayout为例,解读其核心源码:

public class FlowLayoutDemo {
    public static void main(String[] args) {
        JFrame frame = new JFrame("FlowLayout Demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 200);

        JPanel panel = new JPanel(new FlowLayout());

        panel.add(new JButton("Button 1"));
        panel.add(new JButton("Button 2"));
        panel.add(new JButton("Button 3"));

        frame.add(panel);
        frame.setVisible(true);
    }
}

代码解析

在本次的代码演示中,我将会深入剖析每句代码,详细阐述其背后的设计思想和实现逻辑。通过这样的讲解方式,我希望能够引导同学们逐步构建起对代码的深刻理解。我会先从代码的结构开始,逐步拆解每个模块的功能和作用,并指出关键的代码段,并解释它们是如何协同运行的。通过这样的讲解和实践相结合的方式,我相信每位同学都能够对代码有更深入的理解,并能够早日将其掌握,应用到自己的学习和工作中。

  • JFrame:这是一个顶层容器,用于显示窗口。
  • JPanel:这是一个中间容器,可以用于组织多个组件。
  • FlowLayout:这是一个布局管理器,按从左到右、从上到下的顺序排列组件。

  在上面的代码中,我们首先创建了一个JFrame窗口,然后在窗口中创建了一个JPanel,并使用FlowLayout布局管理器来排列按钮。最后,将JPanel添加到JFrame中并显示窗口。

  根据如上的案例,作者在本地进行测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加其他的测试数据或测试方法,以便于进行熟练学习以此加深知识点的理解。

从组件到布局,深入理解Java GUI编程布局管理器🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂

案例分析

  下面我们通过一个实际案例来展示GridLayout的应用。

案例:简单计算器界面

public class Calculator {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Calculator");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);

        JPanel panel = new JPanel(new GridLayout(4, 4));

        String[] buttons = {
                "7", "8", "9", "/",
                "4", "5", "6", "*",
                "1", "2", "3", "-",
                "0", ".", "=", "+"
        };

        for (String text : buttons) {
            panel.add(new JButton(text));
        }

        frame.add(panel);
        frame.setVisible(true);
    }
}

代码解析

在本次的代码演示中,我将会深入剖析每句代码,详细阐述其背后的设计思想和实现逻辑。通过这样的讲解方式,我希望能够引导同学们逐步构建起对代码的深刻理解。我会先从代码的结构开始,逐步拆解每个模块的功能和作用,并指出关键的代码段,并解释它们是如何协同运行的。通过这样的讲解和实践相结合的方式,我相信每位同学都能够对代码有更深入的理解,并能够早日将其掌握,应用到自己的学习和工作中。

  • GridLayout(4, 4):创建一个4行4列的网格布局。
  • JButton:用于创建按钮组件。

在这个示例中,我们创建了一个4x4的网格布局,并在其中放置了一个简单计算器的按钮。

这段Java代码是一个简单的计算器界面实现,使用了Swing图形用户界面工具包。下面是对代码的逐行解析:

  1. package com.demo.javase.day92;:定义了代码的包名为com.demo.javase.day92,通常用于组织Java代码文件。

  2. 导入相关的类库:

    • javax.swing.*;:导入Swing库,用于创建图形用户界面。
    • java.awt.*;:导入AWT库,用于处理组件的布局和绘制。
  3. 类定义和注释:

    • public class Calculator:定义了一个名为Calculator的公共类。
    • 注释部分提供了作者信息、来源公众号和日期。
  4. main方法:

    • public static void main(String[] args):程序的入口点,main方法。
  5. 创建JFrame对象:

    • JFrame frame = new JFrame("Calculator");:创建一个窗口实例,标题为"Calculator"。
  6. 设置窗口默认关闭操作:

    • frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);:设置窗口关闭时程序退出。
  7. 设置窗口大小:

    • frame.setSize(300, 300);:将窗口大小设置为300x300像素。
  8. 创建JPanel对象并设置布局:

    • JPanel panel = new JPanel(new GridLayout(4, 4));:创建一个面板,使用4行4列的网格布局。
  9. 定义按钮文本数组:

    • String[] buttons = { ... };:定义了一个包含按钮文本的字符串数组。
  10. 循环添加按钮到面板:

    • for (String text : buttons) { panel.add(new JButton(text)); }:遍历按钮文本数组,为每个文本创建一个按钮,并添加到面板。
  11. 将面板添加到窗口:

    • frame.add(panel);:将包含按钮的面板添加到窗口。
  12. 使窗口可见:

    • frame.setVisible(true);:使窗口显示出来。

如上段代码创建了一个包含16个按钮(0-9数字键,小数点,以及四个基本运算符加、减、乘、除和等号)的计算器界面。但是,它并没有实现计算器的逻辑功能,仅仅是界面的布局。要使计算器能够执行计算,还需要添加事件监听器来处理按钮点击事件,并实现相应的计算逻辑。

本地运行演示:

从组件到布局,深入理解Java GUI编程布局管理器🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂

应用场景演示

布局管理器广泛应用于各种Java桌面应用程序中。以下是一些常见的应用场景:

  1. 表单布局:使用GridBagLayout可以创建灵活的表单布局,允许组件跨行跨列。
  2. 工具栏:使用FlowLayout可以创建工具栏,按钮或其他组件按顺序排列。
  3. 面板切换:使用CardLayout可以在同一个容器中切换不同的面板。

优缺点分析

优点

  • 灵活性:不同的布局管理器适用于不同的布局需求,可以满足大多数场景的布局需求。
  • 可扩展性:通过自定义布局管理器,可以实现特定的布局效果。
  • 代码简洁:布局管理器的使用可以减少手动设置组件位置的代码量。

缺点

  • 复杂性:对于复杂布局,布局管理器的使用可能较为复杂,需要深入理解每种布局管理器的特点。
  • 性能开销:在某些情况下,布局管理器可能会增加布局计算的开销,影响性能。

类代码方法介绍及演示

以GridBagLayout为例,介绍其常用方法:

public class LayoutTest {
    public static void main(String[] args) {
        // 创建一个JFrame对象,即窗口,标题为"Layout Test"
        JFrame frame = new JFrame("Layout Test");
        
        // 设置窗口的大小为200x200像素
        frame.setSize(200, 200);
        
        // 设置默认的关闭操作为退出程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // 创建一个JPanel对象,使用GridLayout管理器,2行2列的网格布局
        JPanel panel = new JPanel(new GridLayout(2, 2));
        
        // 向panel中添加四个按钮组件
        panel.add(new JButton("Button 1"));
        panel.add(new JButton("Button 2"));
        panel.add(new JButton("Button 3"));
        panel.add(new JButton("Button 4"));
        
        // 将panel添加到frame中
        frame.add(panel);
        
        // 设置frame为可见
        frame.setVisible(true);
    }
}

方法解析

如下是其重要的方法罗列:

  • GridBagConstraints:该类用于定义组件在GridBagLayout中的布局约束,包括位置、跨行跨列等信息。
  • gridx, gridy:定义组件在网格中的位置。
  • gridwidth:定义组件跨越的列数。

在本次的代码演示中,我将会深入剖析每句代码,详细阐述其背后的设计思想和实现逻辑。通过这样的讲解方式,我希望能够引导同学们逐步构建起对代码的深刻理解。我会先从代码的结构开始,逐步拆解每个模块的功能和作用,并指出关键的代码段,并解释它们是如何协同运行的。通过这样的讲解和实践相结合的方式,我相信每位同学都能够对代码有更深入的理解,并能够早日将其掌握,应用到自己的学习和工作中。仅供参考:

  1. 包声明package com.demo.javase.day92; 声明了类的包名,这有助于在大型项目中组织类。

  2. 导入语句import语句导入了Swing和AWT库中所需的类。

  3. 类和方法注释:使用/** */注释块提供了关于类作者、来源和日期的信息。

  4. 主类和主方法public class LayoutTest定义了主类,而public static void main(String[] args)是程序的入口点。

  5. 创建窗口:使用new JFrame("Layout Test")创建了一个标题为"Layout Test"的窗口。

  6. 设置窗口属性frame.setSize(200, 200);设置了窗口的大小,frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);设置了窗口的默认关闭操作为退出程序。

  7. 创建面板和布局管理器JPanel panel = new JPanel(new GridLayout(2, 2));创建了一个JPanel,并使用GridLayout管理器初始化,该管理器将面板分为2行2列的网格布局。

  8. 添加组件:使用panel.add(new JButton("..."));向面板中添加了四个JButton按钮组件。

  9. 将面板添加到窗口frame.add(panel);将配置好的面板添加到窗口中。

  10. 显示窗口frame.setVisible(true);使窗口可见。

使用场景

  如上案例适用于需要快速展示基于网格布局的用户界面元素的情况,例如创建一个简单的表单或者游戏界面。

测试用例

  对于以上案例代码,可以编写测试用例来验证布局管理器的效果。

测试代码

public class LayoutTest {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Layout Test");
        
        frame.setSize(200, 200);
        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel panel = new JPanel(new GridLayout(2, 2));

        panel.add(new JButton("Button 1"));
        panel.add(new JButton("Button 2"));
        panel.add(new JButton("Button 3"));
        panel.add(new JButton("Button 4"));

        frame.add(panel);
        
        frame.setVisible(true);
    }
}

测试结果预期

  在运行上述测试代码时,应看到一个2x2的网格布局,四个按钮分别占据一个网格单元。按钮应自动调整大小以适应容器的大小变化。

实际运行结果

  根据如上的测试用例,作者在本地进行测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加其他的测试数据或测试方法,以便于进行熟练学习以此加深知识点的理解。

从组件到布局,深入理解Java GUI编程布局管理器🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂

测试代码分析

  接着我将对上述代码逐句进行一个详细解读,希望能够帮助到同学们,能以最快的速度对其知识点掌握于心,这也是我写此文的初衷,授人以鱼不如授人以渔,只有将其原理摸透,日后应对场景使用,才能得心应手,如鱼得水。所以如果有基础的同学,可以略过如下代码解析,针对没基础的同学,还是需要加强对代码的逻辑与实现,方便日后的你能更深入理解它并常规使用不受限制。

  如上Java代码演示了如何使用Swing图形用户界面库创建一个简单的窗口应用程序,该程序使用GridLayout布局管理器来布局组件。以下是对这段代码的详细解析:

  1. 包声明package com.demo.javase.day92; 声明了类的包名,有助于在项目中组织类。

  2. 导入语句import语句导入了javax.swing.*java.awt.*,这些是Swing库和AWT库中所需的类。

  3. 类和方法注释:使用文档注释提供了关于类作者、来源和日期的信息。

  4. 主类和主方法public class LayoutTest定义了主类,而public static void main(String[] args)是程序的入口点。

  5. 创建窗口:使用new JFrame("Layout Test")创建了一个标题为"Layout Test"的窗口。

  6. 设置窗口属性frame.setSize(200, 200);设置了窗口的大小,frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);设置了窗口的默认关闭操作为退出程序。

  7. 创建面板和布局管理器JPanel panel = new JPanel(new GridLayout(2, 2));创建了一个JPanel,并使用GridLayout管理器初始化,该管理器将面板分为2行2列的网格布局。

  8. 添加组件:使用panel.add(new JButton("..."));向面板中添加了四个JButton按钮组件。

  9. 将面板添加到窗口frame.add(panel);将配置好的面板添加到窗口中。

  10. 显示窗口frame.setVisible(true);使窗口可见。

小结

  本文是我在社区上分享的关于Java GUI编程的系列教程之一,专注于布局管理器的使用和实践。文章以深入浅出的方式介绍了Java中几种常见的布局管理器,包括FlowLayout、BorderLayout、GridLayout、GridBagLayout和BoxLayout,并通过具体的代码示例,向读者展示了如何创建和使用这些布局管理器来组织GUI组件。

  通过我的详细解析和演示,读者可以清晰地理解每种布局管理器的特点和适用场景。例如,使用FlowLayout可以创建一个简单的工具栏,而GridLayout则适用于创建表格形式的界面布局。文章还提供了核心源码的解读,帮助读者深入理解布局管理器的工作原理。

总结

  这篇文章不仅为Java GUI编程的初学者提供了宝贵的学习资源,也为有经验的开发者提供了布局管理器使用的深入见解。通过结合实际的代码示例和详细的步骤说明,文章有效地帮助读者掌握如何在Java应用程序中实现美观且功能性强的用户界面。

  文章的语言通俗易懂,即便是编程新手也能够跟随教程逐步学习和实践。同时,我还提供了丰富的学习资料和社区资源链接,鼓励读者进一步探索和深入学习Java编程。

  总的来说,这是一篇内容丰富、实用性强的技术文章,无论是对于希望快速入门Java GUI编程的新手,还是对于希望提升布局管理技能的有经验的开发者,都具有很高的参考价值。

  最后,下期事件处理作为GUI编程的核心内容,将进一步丰富读者的编程视野。希望能够帮助到有需要的同学,助力每一位Java开发者的成长和进步。

寄语

  学习编程是一段充满挑战的旅程,但只要坚持不懈,不断实践,你一定会取得长足的进步。希望本文能为你的Java编程之路提供有益的帮助,祝你早日成为一名优秀的Java开发者!

  希望这篇文章对您有帮助!如果有进一步的问题或需求,欢迎随时提问。

下期预告:GUI编程-事件处理

  在下一期的文章中,我们将会深入探讨Java GUI编程中的事件处理机制。事件处理是GUI编程的核心内容之一,通过事件处理,应用程序能够对用户的交互作出响应,如按钮点击、鼠标移动、键盘输入等。

  具体我们将介绍Java中的事件监听器(Listener)、事件源(Event Source)、事件对象(Event Object)等关键概念,并通过实际代码示例展示如何实现常见的事件处理功能。无论你是想为按钮添加点击事件,还是想处理复杂的鼠标和键盘输入,下一期的内容都将为你提供全面的指导,敬请期待吧。

... ...

  ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。

  最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。

  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我


从组件到布局,深入理解Java GUI编程布局管理器🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂

转载自:https://juejin.cn/post/7403627317332803610
评论
请登录