布局管理器

读者会发现,如果使用坐标定位法(空布局),在一个比较复杂的界面上定位每个控件的坐标是一个非常麻烦的工作,而且在界面大小发生改变时,控件的绝对位置也不会随之发生改变。那么如果我们想让用户界面上的组件可以按照不同的方式进行排列怎么办?例如:可以依序水平排列,或者按网格方式进行排列等,其实每种排列方案都是指组件的一种“布局”,要管理这些布局,就需要本节学习的布局管理器。

管理布局的类由java.awt包来提供,布局管理器是一组实现java.awt.LayoutManager接口的类,由这些类自动定位组件。一般使用布局管理器定义容器,如果容器使用了某种布局管理器后,那么放在其上的控件就按照相应的规则排列。我们接下来就介绍几种常用的布局管理器:流式布局(FlowLayout)、边界布局(BorderLayout)、网格布局(GridLayout)。如图1所示。

如上图所示:如果在一个容器中压入控件(该示例的控件用一组JButton代表),我们发现流式布局会将控件放在第一行,第一行满了自动放置在第二行,依次类推;而边界布局会把控件分布在容器的东、南、西、北、中的五个区域;最后网格布局会把容器中的控件按n行m列均匀分布。

注意:

1)一旦使用任何布局,那么控件的坐标定位将失效。

2)如果在使用流式布局的容器中压入JTextField控件,那么这个JTextField的构造方法请

3)使用传int参数的构造方法。

java.awt.FlowLayout

流布局用于安排有方向的控件,这非常类似于段落中的文本行。如表1所示,为FlowLayout类的构造方法。

注意:

JPanel的无参构造方法默认就是流式布局。

【示例1】流式布局

package cn.sxt.views.testlayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class FlowLayoutDemo extends JFrame {

private JPanel pnlMain;

private JButton btn1;

private JButton btn2;

private JButton btn3;

private JButton btn4;

private JButton btn5;

public FlowLayoutDemo() {

//该处代码也可以写成:pnlMain = new JPanel(new FlowLayout());

pnlMain = new JPanel();

btn1 = new JButton("按钮1");

btn2 = new JButton("按钮2");

btn3 = new JButton("按钮3");

btn4 = new JButton("按钮4");

btn5 = new JButton("按钮5");

init();

}

private void init() {

//设置窗口属性

this.setTitle("测试流式布局");

this.setSize(300, 200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//将控件添加到容器上

pnlMain.add(btn1);

pnlMain.add(btn2);

pnlMain.add(btn3);

pnlMain.add(btn4);

pnlMain.add(btn5);

//将容器添加到窗口上

this.add(pnlMain);

this.setVisible(true);

}

/**创建流式布局窗口*/

public static void main(String[ ] args) {

new FlowLayoutDemo();

}

}

执行结果如图所示:

java.awt. BorderLayout

布置容器的边界布局,它可以对容器上的控件进行安排,并调整其大小,使其符合下列五个区域:南、北、东、西和中间区域。 如表3所示,为BorderLayout类的构造方法。

注意:

边界布局最多将容器分成5个区间,但是可以少,比如只有北、中、南,或是只有西、中、东,或是按照需求具体划分

【示例2】边界布局

package cn.sxt.views.testlayout;

import java.awt.BorderLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class BorderLayoutDemo extends JFrame {

private JPanel pnlMain;

private JButton btnN;

private JButton btnC;

private JButton btnS;

private JButton btnW;

private JButton btnE;

public BorderLayoutDemo() {

//将容器的布局设置为边界布局

pnlMain = new JPanel(new BorderLayout());

btnN = new JButton("按钮-北");

btnC = new JButton("按钮-中");

btnS = new JButton("按钮-南");

btnW = new JButton("按钮-西");

btnE = new JButton("按钮-东");

init();

}

private void init() {

//设置窗口属性

this.setTitle("测试边界布局");

this.setSize(300, 200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

/*

* 注意在使用边界布局的容器时,压入控件要以第2参数说明控件放在哪个位置;

* 否则,如果没有第2参数,默认在中间区域

*/

pnlMain.add(btnN,BorderLayout.NORTH);

pnlMain.add(btnC,BorderLayout.CENTER);

pnlMain.add(btnS,BorderLayout.SOUTH);

pnlMain.add(btnW,BorderLayout.WEST);

pnlMain.add(btnE,BorderLayout.EAST);

//将容器添加到窗口上

this.add(pnlMain);

this.setVisible(true);

}

/**创建边界布局窗口*/

public static void main(String[ ] args) {

new BorderLayoutDemo();

}

}

执行结果如图所示:

java.awt. GridLayout

网格布局它以矩形网格形式对容器的控件进行布置。容器被分成大小相等的矩形,一个矩形中放置一个控件。 如表5所示,为GridLayout类的构造方法。

注意:

使用网格布局时,如果控件的数量过多或过少时,网格布局会自动调整,但是行数不会变化,如:设置一个2行3列的网格,如果压入控件为7个,那么自动变为2行4列。

如果在一个容器中要压入12个按钮,按3行4列排列,如示例3所示。

【示例3】网格布局

package cn.sxt.views.testlayout;

import java.awt.GridLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class GridLayoutDemo extends JFrame {

private JPanel pnlMain;

private JButton[ ] btnS;

public GridLayoutDemo() {

//将容器的布局设置为网格布局,指定布局为3行4列

pnlMain = new JPanel(new GridLayout(3, 4));

btnS = new JButton[12];

for(int i = 0;i < btnS.length;i++) {

btnS[i] = new JButton("按钮"+(i+1));

}

init();

}

private void init() {

//设置窗口属性

this.setTitle("测试网格布局");

this.setSize(400, 200);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//将控件添加到容器上

for(JButton btn : btnS) {

pnlMain.add(btn);

}

//将容器添加到窗口上

this.add(pnlMain);

this.setVisible(true);

}

/**创建网格布局窗口*/

public static void main(String[ ] args) {

new GridLayoutDemo();

}

}

执行结果如图所示:


「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

笔记包含从浅入深的六大部分:

A-Java入门阶段

B-数据库从入门到精通

C-手刃移动前端和Web前端

D-J2EE从了解到实战

E-Java高级框架精解

F-Linux和Hadoop

转载于:https://blog.51cto.com/javanew/1956433

14.5-全栈Java笔记:java.awt这些布局怎么写?|流式|边界|网格相关推荐

  1. Java全栈系列笔记

    Java全栈系列笔记 全部文档.项目.源码: github:https://github.com/name365/Blog-Java 码云:https://gitee.com/yang365/Blog ...

  2. 1. JAVA全栈知识体系--- Java基础

    1. JAVA全栈知识体系- Java基础 文章目录 1. JAVA全栈知识体系--- Java基础 1.1 语法基础 面向对象特性? a = a + b 与 a += b 的区别 3*0.1 == ...

  3. 【Java全栈学习笔记:第一阶段:JavaSE】:Java入门及环境搭建

    Java全栈课程网站: KuangStudy JavaSE课程地址: 狂神说Java 参考书籍:Java大学实用教程(第四版) 目录 Java入门及环境搭建 Java帝国的诞生 Java发展 Java ...

  4. Java笔记-Java日常笔记-Java核心语言-史上最全Java笔记-Java烂笔头-实时更新(~v~)

    阿一的日常Java笔记,实时更新,有什么问题可以留言交流一下,大家一起共同进步!!! 1.Java基础 1.1.基本语法 1.1.1.关键字 ​ 定义:被java赋予特殊含义的字符串(单词): ​ 关 ...

  5. Java笔记_16(不可变集合、Stream流、方法引用)

    Java笔记_16 一.创建不可变集合 1.1.创建不可变集合的应用场景 1.2.创建不可变集合的书写格式 二.Stream流 2.1.体验Stream流 2.2.Stream流的思想和获取Strea ...

  6. 字节码学院全栈学习笔记

    今天正式加入字节码学院,努力学习Java全栈,争取在6个月内称为一个了解软件行业的人,本人在这里立铁为证: 搭建vue 组件化开发环境时,需要安装node.js =================== ...

  7. Java笔记——Java多线程~

    多线程 内容来自博客~ 理解线程与进程 进程 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位 ...

  8. 16岁成为全栈开发者:我从开发游戏到写加密货币投资机器人的心路历程

    选自Medium 作者:Nuno Martins 机器之心编译 参与:Luo Sainan.一鸣 全栈开发者听起来是个很高大上的程序员岗位,似乎没有几年工作经验是 Hold 不住的.但是,有个葡萄牙少 ...

  9. 三十、Java图形化界面设计——布局管理器之BorderLayout(边界布局)

    边界布局管理器把容器的的布局分为五个位置:CENTER.EAST.WEST.NORTH.SOUTH.依次对应为:上北(NORTH).下南(SOUTH).左西(WEST).右东(EAST),中(CENT ...

  10. 4.布局:FlowLayout流式布局(Java swing 入门)

    FlowLayout(流式布局管理器)是 JPanel 和 JApplet 的默认布局管理器.FlowLayout 会将组件按照从上到下.从左到右的放置规律逐行进行定位.与其他布局管理器不同的是,Fl ...

最新文章

  1. android之android.intent.category.DEFAULT的用途和使用
  2. 微信扫码支付模式二【无法回调】解决方案
  3. js插件类库组织与管理
  4. 浅析网站建设的基本原则
  5. 动态查看JVM内存的工具
  6. 与table有关的布局
  7. python3 next_对Python 3.2 迭代器的next函数实例讲解
  8. vectorobserver obs是做什么_带着色碳纤维主体的OBS雪佛兰皮卡
  9. 继续增援武汉,紫光及新华三集团对火神山和雷神山医院捐赠设备!
  10. 自行更换iPhone 13屏幕会导致Face ID失效?苹果将发布软件更新解除限制
  11. ESP8266制作简单wifi风扇控制器
  12. 高中 信息科技 计算机网络 课件,初中信息技术课件第一课--认识计算机网络.ppt...
  13. c语言 判断互质,[经典算法] 找出某数以内与其互质的数
  14. java中unicode编码和utf8编码相互转换
  15. html中form表单标签的使用
  16. mysql 8安装方法_Mysql8.0.17安装教程【推荐】
  17. OutLook中的live.cn(吐血配置)
  18. python打开摄像头_Python 调用摄像头
  19. 如何基于WebRTC搭建一个简单的视频会议
  20. 倍福--CE系统设置FTP

热门文章

  1. Android 学习之Fragment的创建
  2. Android UI学习之TextView
  3. Linux系统下多版本gcc使用问题记录
  4. Android分区查看方法
  5. Linux系统中cgroup功能介绍
  6. H264--1--编码原理以及I帧B帧P帧、ptsdts
  7. springboot 直接转发调用_java springboot 引用openfeign 接口转发
  8. 北京市土壤侵蚀强度空间分布数据
  9. 异常点/离群点检测算法——LOF
  10. NYOJ题目171-聪明的kk(dp)