首页 > 其他分享 >Day46--3种布局管理器

Day46--3种布局管理器

时间:2024-12-13 11:20:40浏览次数:7  
标签:管理器 -- frame FlowLayout add new 组件 Day46 Button

Day46--3种布局管理器

必备的英语:

hgap horizontal gap 水平间距 horizontal adj.水平的

vgap vertical gap 垂直间距 vertical adj.垂直的

button的用法;
image-20241213102210585

“label” 通常是指标签。

标签主要用于在界面上显示静态文本信息。例如,在一个登录界面中,“用户名” 和 “密码” 这两个文本提示通常是通过标签来显示的。这些文本帮助用户理解界面中其他输入框或者组件的用途。

流布局的用法:

image-20241213103028128

这段代码看起来是Java语言编写的,它涉及到图形用户界面(GUI)中的布局管理。

  1. 第一行
    • public FlowLayout()是一个构造函数的声明。这里定义了一个公共的(publicFlowLayout类的构造函数。FlowLayout是Java中java.awt包下的一个布局管理器类,用于以流式布局来排列组件。
  2. 第二行
    • this(CENTER, hgap: 5, vgap: 5);这行代码调用了另一个构造函数。在Java中,this()可以用来调用同一个类中的其他构造函数。这里的this()调用了一个带有三个参数的构造函数:
      • CENTER:这可能是FlowLayout类中的一个静态常量,表示组件在容器中居中对齐。
      • hgap: 5vgap: 5:这表示水平间距(hgap)和垂直间距(vgap)都设置为5个像素。这种间距设置会影响到使用FlowLayout布局的组件之间的间隔。

总的来说,这段代码是在定义FlowLayout类的一个构造函数,并且在这个构造函数中调用了另一个带有特定参数的构造函数来设置布局的对齐方式和组件间距。这种布局通常用于在容器(如JPanel)中排列按钮、标签等组件,使它们按照从左到右、从上到下的顺序排列,并保持一定的间距。

流式布局:

流式布局(Flow Layout)是一种在图形用户界面(GUI)设计中常用的布局方式,以下是详细介绍:

一、基本原理

  1. 组件排列顺序
    • 流式布局按照从左到右的顺序依次排列组件。当一行排满时,组件会自动换行到下一行继续排列,就像文字在文档中自动换行一样。
  2. 适应容器大小
    • 它能够根据容器(如面板)的大小自动调整组件的位置。如果容器的宽度增加,组件会在水平方向上尽可能地展开;如果容器宽度减小,组件会自动紧凑地排列,甚至换行。

二、常见属性和应用

  1. 间距设置

    • 流式布局通常有水平间距(hgap)和垂直间距(vgap)属性。这些属性用于控制组件之间的间隔距离,以像素为单位。例如,在Java的FlowLayout中,可以在构造函数中指定这些间距参数,来调整界面的美观程度和组件的分布情况。
  2. 对齐方式

    • 它有不同的对齐方式,常见的有左对齐、居中对齐和右对齐。在Java中,FlowLayout类有对应的常量(如FlowLayout.LEFTFlowLayout.CENTERFlowLayout.RIGHT)来设置组件在容器中的对齐方式。
    • 以一个简单的Java GUI程序为例,使用FlowLayout可以这样编写代码:
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.FlowLayout;
    
    public class FlowLayoutExample {
        public static void main(String[] args) {
            JFrame frame = new JFrame("Flow Layout Example");
            JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
            panel.add(new JButton("Button 1"));
            panel.add(new JButton("Button 2"));
            panel.add(new JButton("Button 3"));
            frame.add(panel);
            frame.setSize(300, 200);
            frame.setVisible(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
    }
    
    • 在这个例子中,创建了一个JFrame(窗口),并在其中添加了一个JPanel(面板),面板采用FlowLayout布局,组件居中对齐,水平和垂直间距都为10像素。然后向面板中添加了三个按钮,这些按钮会按照流式布局的规则进行排列。

三、适用场景

  1. 动态内容展示
    • 当界面中的组件数量不确定或者可能动态变化时,流式布局非常适用。例如,在一个展示图片的应用程序中,如果用户不断添加图片,使用流式布局可以让这些图片自动排列,无需手动调整布局。
  2. 简单的表单设计
    • 对于一些简单的表单,如登录界面、注册界面等,其中包含多个输入框和按钮,采用流式布局可以快速地将这些组件整齐地排列起来。

总之,流式布局以其简单、灵活的特点,在GUI设计中得到了广泛的应用。

示例代码:

package com.liu.gui.lesson1;

import java.awt.*;

public class TestFlowLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("坤坤の窗口");

        //按钮
        Button button1 = new Button("button1");
        Button button3 = new Button("button3");
        Button button2 = new Button("button2");

        //设置为流式布局
        frame.setLayout(new FlowLayout(FlowLayout.LEFT));//居左
        //frame.setLayout(new FlowLayout(FlowLayout.RIGHT));//居左
        //frame.setLayout(new FlowLayout());//居中

        frame.setSize(200,200);

        //添加按钮
        frame.add(button1);
        frame.add(button2);
        frame.add(button3);

        frame.setVisible(true);
    }
}

image-20241213104105548

Border Layout(边界布局)

    • 原理:将容器划分为五个区域,分别是北(North)、南(South)、东(East)、西(West)和中(Center)。每个区域只能放置一个主要组件,组件会自动填充所在的区域。例如,放置在 “North” 区域的组件会在容器的顶部横向伸展,放置在 “Center” 区域的组件会填充中间部分并在其他组件放置后占用剩余的空间。
    • 应用场景:常用于设计主框架式的布局,如一个具有菜单栏(North)、状态栏(South)、工具面板(East 或 West)和主要内容显示区(Center)的应用程序界面。
    • 示例代码(Java)
   import javax.swing.JButton;
   import javax.swing.JFrame;
   import javax.swing.JPanel;
   import java.awt.BorderLayout;

   public class BorderLayoutExample {
       public static void main(String[] args) {
           JFrame frame = new JFrame("Border Layout Example");
           JPanel panel = new JPanel(new BorderLayout());
           panel.add(new JButton("North Button"), BorderLayout.NORTH);
           panel.add(new JButton("South Button"), BorderLayout.SOUTH);
           panel.add(new JButton("East Button"), BorderLayout.EAST);
           panel.add(new JButton("West Button"), BorderLayout.WEST);
           panel.add(new JButton("Center Button"), BorderLayout.CENTER);
           frame.add(panel);
           frame.setSize(300, 200);
           frame.setVisible(true);
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       }
   }

代码:

package com.liu.gui.lesson1;

import java.awt.*;

public class TestBorderLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("鲲鲲の");

        Button east = new Button("East");
        Button west = new Button("West");
        Button north = new Button("North");
        Button south = new Button("South");
        Button center = new Button("Center");

        frame.add(east,BorderLayout.EAST);
        frame.add(west,BorderLayout.WEST);
        frame.add(north,BorderLayout.NORTH);
        frame.add(south,BorderLayout.SOUTH);
        frame.add(center,BorderLayout.CENTER);

        frame.setSize(800,800);
        frame.setVisible(true);
    }
}

image-20241213110027239

Grid Layout(网格布局)

  • 原理:把容器的空间划分成规则的网格状,组件按照从左到右、从上到下的顺序依次填充到这些网格中。所有网格的大小相同,组件会自动拉伸以适应网格的大小。可以指定网格的行数和列数。

  • 应用场景:适用于排列多个大小相同的组件,如计算器界面上的数字按钮和操作符按钮,或者棋牌类游戏的棋盘格布局。

  • 语法:

  • public GridLayout() {
    	this( rows: 1, cols: 0, hgap: 0, vgap: 0);
    }
    
  • 示例代码(Java)

   import javax.swing.JButton;
   import javax.swing.JFrame;
   import javax.swing.JPanel;
   import java.awt.GridLayout;

   public class GridLayoutExample {
       public static void main(String[] args) {
           JFrame frame = new JFrame("Grid Layout Example");
           JPanel panel = new JPanel(new GridLayout(3, 3));
           for (int i = 1; i <= 9; i++) {
               panel.add(new JButton(String.valueOf(i)));
           }
           frame.add(panel);
           frame.setSize(300, 200);
           frame.setVisible(true);
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       }
   }
package com.liu.gui.lesson1;

import java.awt.*;

public class TestGridLayout {
    public static void main(String[] args) {
        Frame frame = new Frame("鲲鲲のhahhaa");

        Button button1 = new Button("button1");
        Button button2 = new Button("button2");
        Button button3 = new Button("button3");
        Button button4 = new Button("button4");
        Button button5 = new Button("button5");
        Button button6 = new Button("button6");
//设置3行2列的布局
frame.setLayout(new GridLayout(3,2));

frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.add(button5);
frame.add(button6);

frame.setVisible(true);

frame.pack();

    }

}

image-20241213111603567

frame.pack()的主要作用:

根据框架(frame)内的组件大小和布局来自动调整框架的大小。它会计算所有添加到框架中的组件所需要的空间,并将框架设置为刚好能容纳这些组件的最小尺寸。

frame.pack()setSize()方法的对比:

  • setSize()方法不同,setSize()是手动设置框架的大小,而pack()是自动根据组件来调整大小。
  • 如果使用setSize(),需要准确地知道框架应该设置为多大才能很好地展示组件,这在组件数量较多或者布局复杂时可能比较困难。而pack()可以自动处理这些问题,让组件能够以合适的方式显示在框架内。

作业:

image-20241213111833378

标签:管理器,--,frame,FlowLayout,add,new,组件,Day46,Button
From: https://www.cnblogs.com/xiaokunzhong/p/18604508

相关文章

  • Day46--frame.add()语法
    Day46--frame.add()语法基本语法形式:frame.add(component);frame:这是一个JFrame对象(或者是实现了Container接口的容器对象),代表图形用户界面中的窗口或者一个容器,用于容纳其他组件。component:是要添加到frame中的组件对象,比如JButton(按钮)、JLabel(标签)、JTextField(文本框)等。......
  • 在易优CMS中,field标签的基本用法是什么?
    在易优CMS中,field标签用于获取channelartlist标签内的字段值。field标签只能在channelartlist标签内部使用,主要用于显示栏目相关的字段值。基本语法如下:html {eyou:channelartlisttypeid='栏目ID'type='son'row='20'}<ahref='{eyou:fieldname='typeurl'/}......
  • PbootCMS中如何使用站点信息标签来优化SEO?
    在PbootCMS中,使用站点信息标签可以显著提升网站的SEO效果。通过合理使用这些标签,你可以确保每个页面的关键字、描述和标题都符合搜索引擎的要求,从而提高网站的排名和流量。以下是如何使用站点信息标签优化SEO的详细步骤和示例代码:页面标题:html <title>{pboot:pagetitle}......
  • 如何在PbootCMS中保护留言用户的隐私信息?
    在PbootCMS中保护留言用户的隐私信息非常重要,特别是在显示手机号码等敏感信息时。PbootCMS提供了多种方法来保护用户的隐私信息,以下是一些常见的做法和代码示例:使用 substr 函数隐藏手机号码:PbootCMS的 {pboot:message} 标签支持使用 substr 函数来截取字符串,从而隐藏......
  • 解锁生产力:必试的工作日程App
    在数字化时代,时间管理已成为个人和企业提高生产力和效率的关键。工作日程App作为这一需求的解决方案,已经成为职场人士不可或缺的工具。本文将深入探讨工作日程App的重要性、功能、以及如何有效利用这些App优化工作流程。引言随着工作和生活节奏的加快,管理好每一天的工作任务变得......
  • 名称设计
    如果内容是以文章为主•article:适用于以文章为核心的工具,强调内容的文本性质。•post:更通用的名称,适合发布的内容,可以是文章、动态、公告等。•entry:如果内容是广义的记录或条目,也可以用这个名称。 如果内容更像资源类型(可包括图片、文件等)•resource:适合内容以多种形式存......
  • 12.11日报
    今天完成软件设计实验二十四模板方法模式,以下为今日实验内容:实验24:模板方法模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解模板方法模式的动机,掌握该模式的结构;2、能够利用模板方法模式解决实际问题。     [实验任务一]:数据库连接对......
  • opencv imshow 大图片显示,拖动显示
    用imshow显示大图片,不能完整显示,不方便。结合网友的代码,修改成现在的代码,可以拖动图片,方便查看完整图片。而且方便调试,只需要用MatShow替换imshow。structMouseParam{intm_WinWidth;//窗口大小intm_WinHeight;cv::Stringm_WinName;//窗口名称cv::Po......
  • 12.12日报
    今天完成机器学习B实验,并且进行软件需求分析大作业验收,以下为今日实验部分内容实验五:BP神经网络算法实现与测试一、实验目的深入理解支持向量机(SVM)的算法原理,能够使用Python语言实现支持向量机的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。  二、实验内......
  • 学习Python的第一天
    第一课:1、Python的下载和安装,注意在安装是下面有个打勾的要勾上。2、PyCharm的下载和安装,在官网,前期使用30天。3、创建自己的博客、微博,注册博客园。第二课:1、我的第一个Python程序:第一部分:人机交互的方式:1图形化Windowsmac2命令行LinuxWindows:win+R输入cmdpri......