布局管理器:

组件在容器中的位置和尺寸是由布局管理器决定的,每当需要重新调整屏幕大小时,都要用到布局管理器。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(流式布局管理器),所有的组件居中对齐,水平和垂直间距为3frame.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(边界布局),组件间横向、纵向间距均为5frame.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);}
}

运行结果如下:

GUI(图形用户界面)之布局管理器相关推荐

  1. java gui容器_[Java教程]GUI Panel 容器以及布局管理器

    [Java教程]GUI Panel 容器以及布局管理器 0 2016-11-09 07:04:32 一.Panel是AWT中的另一个典型的容器,它代表不能独立存在.必须放在其他容器中使用. 1.可作为 ...

  2. java -- GUI程序设计之无布局管理器布局

    无布局管理器布局 要采用无布局管理器布局,首先要取消Swing默认的布局管理器,否则布局方法不会生效.其方法是调用容器的setLayout方法,并将布局管理器设置为null.取消默认的布局管理器之后, ...

  3. GUI(图形用户界面)——AWT概述、布局管理器

    文章目录 1. GUI简介 2. AWT概述 2.1 Component(组件) 2.2 Container(容器) 2.2.1 Window 2.2.2 Panel(面板) 3.布局管理器 3.1 ...

  4. Java 图形用户界面(GUI)布局管理器

    组件不能单独存在,必须放置于容器中,组件在容器中的位置和尺寸是由布局管理器来决定的 FlowLayout(流式布局管理器) BoderLayout(边界布局管理器) GridLayout(网格布局管理 ...

  5. Java GUI(图形用户界面)-----GridLayout(网格布局管理器)详解

    GridLayout(网格布局管理器) 可以把容器分成n行m列大小相等的网格,每个网格放置一个组件,按照从左往右,从上往下的顺序依次添加,放置在Gird Layout布局管理器的组件将自动占据网格的整 ...

  6. Java之GUI图形界面( Swing、容器组件、 布局管理器、常用容器、常用组件)

    目录 Swing概述 容器和组件 常用容器 JFrame: JPanel : 常用组件 JLabel 标签: JTextField 单行文本: JTextArea 多行文本框: JPasswordFi ...

  7. python图形界面化编程GUI(二)常用的组件(Text、Radiobutton、Checkbutton、Canvas)和布局管理器(gird、pack、place)

    Text文本框 Text(多行文本框)的主要用于显示多行文本,还可以显示 网页链接, 图片, HTML 页面, 甚至 CSS 样式表,添加组件 等.主要用来显示信息,也常被当做简单的文本处理器.⽂本编 ...

  8. JAVA图形界面(GUI)之布局管理器

    一个友好的读者界面是一款软件成功的关键因素之一.布局管理器就是用来管理读者的界面.摆放的效果直接影响到界面是否美观.布局管理器通过布局管理类来对各种读者组件进行管理. 使用布局管理器,不仅可以有序的排 ...

  9. java图形界面怎么进行布局_JAVA图形界面(GUI)之布局管理器

    一个友好的读者界面是一款软件成功的关键因素之一.布局管理器就是用来管理读者的界面.摆放的效果直接影响到界面是否美观.布局管理器通过布局管理类来对各种读者组件进行管理. 使用布局管理器,不仅可以有序的排 ...

最新文章

  1. 这样一款超低功耗的集成 2.4 GHz Wi-Fi 和支持长距离的 Bluetooth LE 5.0的SOC,你怎么能不爱它?
  2. oracle spfile和pfile文件
  3. Linux netstat命令详解和使用例子(显示各种网络相关信息)
  4. sql必知必会的数据初始化
  5. wpf messagebox.show()点击其他地方会闪烁_定时、童锁、故障查询,线控器上的这些功能你会用吗?...
  6. java 权限url权限_Java秒杀系统实战系列~整合Shiro实现用户登录认证
  7. 【045】HTML初学
  8. DataGrip之一个赏心悦目的SQL格式化模板,快用起来吧
  9. SIPP对接fs压力测试
  10. 小白入门之海康威视摄像机的二次开发
  11. gmx genion命令
  12. centos mysql mariadb_centos7 mysql和mariadb的资料 - 菜鸟头头
  13. AI深度、机器学习数据集资源汇总
  14. 大数据正式京淘附加爬虫
  15. 使用扫码枪(二维码,条码)使用键盘钩子获取扫码数据
  16. MQ--1( Message queuing)RabbitMQ
  17. 在SQL Server 2000中设置OPTION (MAXDOP 1) 性能提高问题
  18. 研究亥姆霍兹线圈轴线磁场分布(2)
  19. 计算机网络验证性实验
  20. 解码北京冬奥沉浸式报道黑科技: 阿里云视频云「互动虚拟演播技术」

热门文章

  1. Linux怎么关闭135端口,window2003关闭135,3389端口
  2. 零基础36天学c语言心得总结
  3. about wiki
  4. oracle查看编码格式以及修改字符集编码
  5. 计算机毕业设计Java计算机类专业考研交流学习平台(源码+系统+mysql数据库+lw文档)
  6. m基于深度学习的OFDM信道估计和均衡算法误码率matlab仿真,对比了LS,MMSE以及LMMSE等传统的信道估计算法
  7. #周报:11月15日——11月21日
  8. 爱情表白html,爱情表白词大全
  9. Integer源码分析
  10. 虚拟机中Operating System not found 解决方法