Java深入学习图形用户界面GUI之布局管理器

布局管理器:

组件在容器中的位置和尺寸是由布局管理器决定的,每当需要重新调整屏幕大小时,都要用到布局管理器。Swing常用的布局管理器有4种,分别是FlowLayout(流式布局管理器)、BorderLayout(边界布局管理器)、GridLayout(网格布局管理器)、GridBagLayout(网格包布局管理器)。Swing容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器可自动进行组件的布局管理。

FlowLayout属于流式布局管理器,是最简单的布局管理器。在这种布局下,容器会将组件按照添加顺序从左向右放置。当达到容器的边界时,自动将组件放到下一行的开始位置。这些组件可以按左对齐、居中对齐(默认方式)或右对齐的方式排列。

FlowLayout布局管理器的特点是可以将所有组件像流水一样依次进行排列,不需要用户明确设定,但是灵活性相对较差。如果将窗体拉伸变宽,按钮的大小和按钮之间的间距将保持不变,但按钮相对于容器边界的距离会发生变化,这一点大家可以将下文的案例代码运行自行体会。

FlowLayout案例:

import javax.swing.*;
import java.awt.*;
public class GUI_2布局管理器 {
    public static void main(String[] args) {
        JFrame frame=new JFrame("布局管理器");
        frame.setSize(600,300);
        //设置窗体中的布局管理器为FlowLayout(流式布局管理器),所有的组件居中对齐,水平和垂直间距为3
        frame.setLayout(new FlowLayout(FlowLayout.CENTER,3,3));
        JButton button=null;
        for (int i = 1; i <= 9; i++) {
            //创建按钮
            button=new JButton("按钮"+i);
            frame.add(button);
        }
        //设置窗体大小
        frame.setSize(280,250);
        //显示组件
        frame.setVisible(true);
  }
}

GridLayout布局管理器是以网格的形式管理容器中组件布局的。GridLayout使用纵横线将容器分成n行m列大小相等的容器,每个网格中放置一个组件。添加到容器中的组件首先放置在第1行第1列(左上角)的网格中,然后在第1行的网格中从左向右依次放置其他组件。一行放满之后,继续在下一行从左到右放置组件。GridLayout管理方式与FlowLayout类似,但与FlowLayout不同的是,使用GridLayout管理的组件将自动占据网格的整个区域。

GridLayout布局管理器的特点是组件的相对位置不随区域的缩放而改变,但组件的大小会随之改变,组件始终占据网格的整个区域。其缺点是总是忽略组件的最佳大小,所有组件的宽高都相同。

GridLayout案例:

import javax.swing.*;
import java.awt.*;
public class GUI_2布局管理器 {
    public static void main(String[] args) {
        JFrame frame=new JFrame("布局管理器");
        frame.setSize(600,300);
//        设置窗体中的布局管理器为GridLayout(网格式),设置窗体为3*3的网格
       frame.setLayout(new GridLayout(3,3));
        JButton button=null;
        for (int i = 1; i <= 9; i++) {
            //创建按钮
            button=new JButton("按钮"+i);
            frame.add(button);
        }
        //设置窗体大小
        frame.setSize(280,250);
        //显示组件
        frame.setVisible(true);
  }
}

BorderLayout(边界布局管理器)是一种较为复杂的布局方式,它将窗体划分为5个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。组件可以被放置在这5个区域中的任意一个区域中。

BorderLayout案例:

import javax.swing.*;
import java.awt.*;
public class GUI_2布局管理器 {
    public static void main(String[] args) {
        JFrame frame=new JFrame("布局管理器");
        frame.setSize(600,300);
        //设置窗体中的布局管理器为BorderLayout(边界布局),组件间横向、纵向间距均为5
        frame.setLayout(new BorderLayout(5,5));
        frame.add(new JButton("按钮1"),BorderLayout.EAST);//东
        frame.add(new JButton("按钮2"),BorderLayout.SOUTH);//南
        frame.add(new JButton("按钮3"),BorderLayout.NORTH);//北
        frame.add(new JButton("按钮4"),BorderLayout.WEST);//西
        frame.add(new JButton("按钮5"),BorderLayout.CENTER);//中
        frame.setVisible(true);//显示组件
  }
}

GridBagLayout是最灵活、最复杂的布局管理器,它与GridLayout布局管理器类似,不同之处在于GridBagLayout允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。需要注意的是,如果希望组件的大小随容器的增大而增大,必须同时设置GridBagConstraints对象的fill属性和weightx、weighty属性。

GridBagLayout案例:

import javax.swing.*;
import java.awt.*;
public class GUI_2布局管理器 {
    public static void main(String[] args) {
        JFrame frame=new JFrame("布局管理器");
        frame.setSize(600,300);
        //GridBagLayout布局管理器(最灵活,最复杂),需要自己设置各个按钮或文本的位置
        frame.setLayout(null);
        Font font=new Font("仿宋",Font.BOLD,20);
        JLabel jl1=new JLabel("用户名:");
        jl1.setBounds(10,10,160,40);//设置按钮的坐标,x,y,长,高
        jl1.setFont(font);//设置统一字体,保证代码整洁、美观
        JTextField jf1=new JTextField("请输入用户名:",20);
        jf1.setBounds(130,10,230,40);
        jf1.setFont(font);
        JLabel jl2=new JLabel("密码:");
        jl2.setBounds(10,60,160,40);
        jl2.setFont(font);
        JTextField jf2=new JTextField("请输入密码:",20);
        jf2.setBounds(130,60,230,40);
        jf2.setFont(font);
        JButton jb1=new JButton("登录");
        jb1.setBounds(40,120,100,40);
        jb1.setFont(font);
        JButton jb2=new JButton("退出");
        jb2.setBounds(160,120,100,40);
        jb2.setFont(font);
        frame.add(jl1);//将这些按钮添加到窗口上
        frame.add(jf1);
        frame.add(jl2);
        frame.add(jf2);
        frame.add(jb1);
        frame.add(jb2);
        frame.setVisible(true);
    }
}

运用上面所讲的GridBagLayout布局管理器写一个计算机模板(没有实用功能,但外貌相似),还有更简便的方法,但这里我们使用GridBagLayout一种布局管理器实现。

import javax.swing.*;
import java.awt.*;
class 计算机{
    public static void main(String[] args) {
        JFrame frame=new JFrame("计算器");
        frame.setSize(320,300);
        frame.setLayout(null);
        Font font=new Font("仿宋",Font.BOLD,20);
        JTextField jf1=new JTextField("     ",20);
        jf1.setBounds(10,10,180,40);
        jf1.setFont(font);
        JButton jl1=new JButton("删除");
        jl1.setBounds(190,10,110,40);
        jl1.setFont(font);
        JButton jb1=new JButton("1");
        jb1.setBounds(10,50,50,40);
        jb1.setFont(font);
        JButton jb2=new JButton("2");
        jb2.setBounds(70,50,50,40);
        jb2.setFont(font);
        JButton jb3=new JButton("3");
        jb3.setBounds(130,50,50,40);
        jb3.setFont(font);
        JButton jb4=new JButton("+");
        jb4.setBounds(190,50,50,40);
        jb4.setFont(font);
        JButton jb16=new JButton("*");
        jb16.setBounds(250,50,50,40);
        jb16.setFont(font);
        JButton jb5=new JButton("4");
        jb5.setBounds(10,100,50,40);
        jb5.setFont(font);
        JButton jb6=new JButton("5");
        jb6.setBounds(70,100,50,40);
        jb6.setFont(font);
        JButton jb7=new JButton("6");
        jb7.setBounds(130,100,50,40);
        jb7.setFont(font);
        JButton jb8=new JButton("-");
        jb8.setBounds(190,100,50,40);
        jb8.setFont(font);
        JButton jb9=new JButton("7");
        jb9.setBounds(10,150,50,40);
        jb9.setFont(font);
        JButton jb10=new JButton("8");
        jb10.setBounds(70,150,50,40);
        jb10.setFont(font);
        JButton jb11=new JButton("9");
        jb11.setBounds(130,150,50,40);
        jb11.setFont(font);
        JButton jb12=new JButton("0");
        jb12.setBounds(190,150,50,40);
        jb12.setFont(font);
        JButton jb15=new JButton("/");
        jb15.setBounds(250,100,50,40);
        jb15.setFont(font);
        JButton jb14=new JButton(".");
        jb14.setBounds(250,150,50,40);
        jb14.setFont(font);
        JButton jb13=new JButton("=");
        jb13.setBounds(10,200,300,40);
        jb13.setFont(font);
        frame.add(jl1);
        frame.add(jf1);
        frame.add(jb1);
        frame.add(jb2);
        frame.add(jb3);
        frame.add(jb4);
        frame.add(jb5);
        frame.add(jb6);
        frame.add(jb7);
        frame.add(jb8);
        frame.add(jb9);
        frame.add(jb10);
        frame.add(jb11);
        frame.add(jb12);
        frame.add(jb13);
        frame.add(jb14);
        frame.add(jb15);
        frame.add(jb16);
        frame.setVisible(true);
    }
}

运行结果如下:

到此这篇关于Java深入学习图形用户界面GUI之布局管理器的文章就介绍到这了,更多相关Java布局管理器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java GUI进阶之流式布局管理器FlowLayout专项精讲

    目录 Java GUI AWT概述 AWT中的继承关系 1.Windows 2.Panel 布局管器 FlowLayout(流式布局管理器) Java GUI GUI的全称是Graphical User Interface,即图形用户界面,是应用程序提供给用户操作的图形界面,包括窗口,菜单,按钮,工具栏和其他各种图形界面元素. AWT概述 AWT是用于创建图形用户界面的一个工具包,提供了一些用于实现图形界面的组件,,在JDK中针对每个组件都提供了对应的Java类,这些类都位于Java.awt包.

  • Java深入学习图形用户界面GUI之布局管理器

    布局管理器: 组件在容器中的位置和尺寸是由布局管理器决定的,每当需要重新调整屏幕大小时,都要用到布局管理器.Swing常用的布局管理器有4种,分别是FlowLayout(流式布局管理器).BorderLayout(边界布局管理器).GridLayout(网格布局管理器).GridBagLayout(网格包布局管理器).Swing容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的setLayout()方法设置布局管理器,通过布局管理器可自动进行组件的布局管理. FlowLay

  • Java深入学习图形用户界面GUI之事件处理

    Swing组件中的事件处理专门用于响应用户的操作,例如,响应用户的鼠标单击.按下键盘等操作.在Swing事件处理的过程中,主要涉及三类对象: 1.事件源:事件发生的场所,通常是产生事件的组件,如窗口.按钮.菜单等. 2.事件对象:封装了GUI组件上发生的特定事件(通常就是用户的一次操作). 3.监听器:负责监听事件源上发生的事件,并对各种事件做出相应处理(监听器对象中包含事件处理器). 实现Swing事件处理的主要步骤如下: 1.创建事件源:除了一些常见的按钮.键盘等组件可以作为事件源外,还可以

  • Java深入学习图形用户界面GUI之创建窗体

    GUI全程是Graphical User Interface,即图形用户界面.顾名思义,GUI就是可以让用户直接操作的图形化界面,包括窗口.菜单.按钮.工具栏和其他各种图形界面元素.目前,图形用户界面已经成为一种趋势,几乎所有的程序设计语言都提供了GUI设计功能. Java针对GUI设计提供了丰富的类库,这些类分别位于java.awt和javax.swing包中,简称为AWT和Swing.AWT引入了大量的Windows函数,因此称为中重量级组件.Swing是以AWT为基础构建起来的轻量级的图形

  • php7 图形用户界面GUI 开发示例

    本文实例讲述了php7 图形用户界面GUI 开发.分享给大家供大家参考,具体如下: 一.下载指定系统扩展 http://pecl.php.net/package/ui http://pecl.php.net/package/ui/2.0.0/windows 由于我的系统是64位win10,php版本是7.1,所以选择7.1 Thread Safe (TS) x64,linux用户可以自行下载源码包,编译安装. 解压php_ui-2.0.0-7.1-ts-vc14-x64.zip,把php_ui.

  • JAVA布局管理器与面板组合代码实例

    JPanel是面板组件,非顶层容器,一个界面只有可以有一个JFrame窗体组件,但可以有多个Jpanel面板,而JPanel上也可以使用FlowLayout,BorderLayout,GirdLayout等布局管理器,这样可以组合使用达到比较复杂的布局效果. 注意事项 Ⅰ.JPanel是JComponent的子类 Ⅱ.属于容器组件,可以加入别的组件 Ⅲ.默认布局管理器是流式布局(FlowLayout) /* * 作者:白客C * 时间:2020年03月05日 * 内容:gui窗体 * 步骤: *

  • JAVA swing布局管理器实例解析

    组件在容器(比如Jframe)中的位置和大小是由布局管理器来决定的.所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理. 种类 java共提供了五种布局管理器,只介绍三种是最常见的布局管理器. 边界布局BorderLayout 边界布局将容器简单的划分为东南西北中5个区域,中间区域最大.JFrame.JDialog默认布局就是BorderLayout. /* * 作者:白客C * 时间:2020年03月05日 * 内容:gui窗体 * 步骤: * 1.继承JFrame * 2.定义

  • Java BoxLayout(盒子布局)布局管理器解析

    目录 2.4.6 BoxLayout 案例1 案例2 案例3 2.4.6 BoxLayout 为了简化开发,Swing 引入了 一个新的布局管理器 : BoxLayout . BoxLayout 可以在垂直和 水平两个方向上摆放 GUI 组件, BoxLayout 提供了如下一个简单的构造器: 方法名称 方法功能 BoxLayout(Container target, int axis) 指定创建基于 target 容器的 BoxLayout 布局管理器,该布局管理器里的组件按 axis 方向排

  • 一篇文章带你了解Java容器,面板及四大布局管理器应用

    目录 什么是容器? 什么是面板? JPanel面板 JScrollPane面板 什么是布局管理器? 绝对布局管理器 流布局管理器 边界布局管理 网格布局管理器 容器.面板.布局管理器之间的关系 总结 什么是容器? 在Java的GUI界面设计中,关于容器的理解,从字面意思我们就可以认为它是存放控件的地方,而这个地方依托在窗体之上,常用的容器是container. 而关于container容器我们应该有这样的认识:Swing组件中的窗体通常是与容器相关联的,所以在一般情况下,建立完JFrame窗体后

  • java中容器(顶层容器和中间容器)的布局管理器详解

    目录 java容器(顶层容器和中间容器)的布局管理器 一.布局管理器所属类包 二.容器的默认布局管理器 java常用的四大容器总结 一.为什么要使用容器(集合类)? 二.Java中四大容器的简介与区别 三.Java的容器体系 java容器(顶层容器和中间容器)的布局管理器 Java能够以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不同,为此java提供了布局管理器,使编写的图形界面具有良好的平台无关性. 注意:所有的布局管理器均是针对容器来使用的,包括顶

随机推荐