概念:

  组建在容器(比如JFrame)中的位置和 大小 是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组建的布局管理。

种类:

  java共提供了物种布局管理器:流式布局管理器(FlowLayout),边界布局管理器(BorderLayout),网络布局管理器(GridLayout),卡片布局管理器(CardLayout),网格布局管理器(GridBagLayout)。其中前三种是最常见的布局管理器。

一.  边界布局管理器

  边界布局管理器 BorderLayout 注意事项

  1. 不是五个部分都必须添加

  2. 中部组件会自动的调节大小

  3. JFrame,JDialog 默认布局管理器就是BorderLayout

  example:

  

 package layout;
/*
* borderlayout演示
* 1. 集成JFrame
* 2. 定义你需要的组件
* 3. 创建组件(构造函数)
* 4. 添加组件
* 5. 对窗体设置属性
* 6. 显示窗体
*/
import java.awt.*;
import javax.swing.*;
public class demo extends JFrame{ /**
* @param args
*/
//定义组件
JButton jb1,jb2,jb3,jb4,jb5;
public static void main(String[] args) {
// TODO Auto-generated method stub
demo demo = new demo();
} public demo()
{
//创建组件
jb1 = new JButton("中部");
jb2 = new JButton("北部");
jb3 = new JButton("东部");
jb4 = new JButton("南部");
jb5 = new JButton("西部"); //添加各个组件
this.add(jb1,BorderLayout.CENTER);
this.add(jb2,BorderLayout.NORTH);
this.add(jb3,BorderLayout.EAST);
this.add(jb4,BorderLayout.SOUTH);
this.add(jb5,BorderLayout.WEST); //设置窗体属性
this.setTitle("边界布局案例");
this.setSize(300,200);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示窗体
this.setVisible(true);
}
}

二. 流式布局FlowLayout

  FlowLayout布局,按照组建的添加次序将按钮组件(当然也可以是别人的组件)从左到右放置在容器中。当到达容器的边界时,组件将放置在下一行中。FlowLayout可以以左对齐,剧中对齐,以右对齐的方式排列组件。

  流式布局FlowLayout注意事项

  1. 不限制他所管理的组件大小,允许他们有最佳大小

  2. 当容器被缩放时,组件的位置可能变化,但组件的大小不变

  3. 默认组件是居中对齐,可以通过FlowLayoyt(intalign)函数来指定对齐方式

  exmaple:

  

 package layout;
import java.awt.*; import javax.swing.*; /*
*
* 动能:流式布局管理器
* */
public class demo5 extends JFrame{ /**
* @param args
*/
//定义组件
JButton jb1,jb2,jb3,jb4,jb5,jb6;
public static void main(String[] args) {
// TODO Auto-generated method stub
demo5 de = new demo5();
} //构造函数
public demo5()
{
//创建组件
jb1 = new JButton("关羽");
jb2 = new JButton("张飞");
jb3 = new JButton("赵云");
jb4 = new JButton("马超");
jb5 = new JButton("黄忠");
jb6 = new JButton("魏延"); //添加组件
this.add(jb1);
this.add(jb2);
this.add(jb3);
this.add(jb4);
this.add(jb5);
this.add(jb6); //设置布局管理器,默认居中对齐,改成左对齐
this.setLayout(new FlowLayout(FlowLayout.LEFT)); //设置窗体属性
this.setTitle("边界布局案例");
this.setSize(300,200);
this.setLocation(200,200);
//禁止 用户改变窗体大小
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //显示窗体
this.setVisible(true);
}
}

三. 网格布局GridLayout

  GridLayout布局,它将容器分割成多行多列,组件被填充到容器中的组件首先放置在左上角的网格中,然后从左到右放置其它的组件,当沾满改行的所有网格后,接着继续在下一行从左到右放置组件。

  注意事项:

  1. 组件的相对位置不随容器的缩放而变化,但大小会变化。

  2. 所有组建的大小相同

  3. 可以通过gridLayout(int rows, int cols, int hgap, int vgap)来指定网格的行/列,水平间隙/垂直间隙.

  example:

  

 package demo7;

 import java.awt.*;

 import javax.swing.*;
public class demo7 extends JFrame{ /**
* @param args
*/
//定义组件 int size = 9;
//这里需要进行初始值
JButton jbs[] = new JButton[size];
public static void main(String[] args) {
// TODO Auto-generated method stub
demo7 dem = new demo7();
} //构造方法
public demo7()
{
//创建组件
for(int i=0;i<jbs.length;i++)
{
jbs[i] = new JButton(String.valueOf(i));
} //设置网格布局
this.setLayout(new GridLayout(3,3,10,10)); //添加组件
for(int i=0;i<size;i++)
{
this.add(jbs[i]);
} //设置窗体属性
this.setTitle("网格布局案例 ");
this.setSize(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(200, 300); //显示
this.setVisible(true);
}
}

四. 面板组件(Jpanel)

  在图形用户界面编程中,如果只是普通的组件布局,我们 用前面讲的三种布局管理器就可以解决,但是在比较复杂的布局要求时,就需要使用布局管理器的组合使用。

  一个界面只可以有一个JFrame窗体组件,但可以用多个Jpanel面板组件,而JPanel上也可使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,这样可以组合使用达到较为复杂的布局效果。

  注意事项:

  1. JPanel是JComponent的子类

  2. 属于容器类组件,可以加入别的组件

  3. 默认布局管理器是流式布局

java基础 布局管理器的更多相关文章

  1. 面试题-Java基础-布局管理器

    1.什么是布局管理器? 布局管理器用来在容器中组织组件.

  2. 5、Java Swing布局管理器(FlowLayout、BorderLayout、CardLayout、BoxLayout、GirdBagLayout 和 GirdLayout)

    5.Java-Swing常用布局管理器       应用布局管理器都属于相对布局,各组件位置可随界面大小而相应改变,不变的只是其相对位置,布局管理器比较难以控制,一般只在界面大小需要改是才用,但即使这 ...

  3. Java GUI 布局管理器

    容器可设置布局管理器,管理容器中组件的布局: container.setLayout(new XxxLayout()); Java有6种布局管理器,AWT提供了5种: FlowLayout Borde ...

  4. JAVA 网格布局管理器

    //网格布局管理器 import java.awt.*; import javax.swing.*; public class Jiemian3 extends JFrame{ //定义组件 JBut ...

  5. JAVA 边界布局管理器

    //边界布局管理器 import java.awt.*; import javax.swing.*; public class Jiemian1 extends JFrame{ //定义组件 JBut ...

  6. Java 的布局管理器GridBagLayout的使用方法(转)

    GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的, GridBagLayout 类是一个灵活的布局管理器,它不要求 ...

  7. Java 的布局管理器GridBagLayout的使用方法【图文说明】

    https://www.cnblogs.com/taoweiji/archive/2012/12/14/2818787.html GridBagLayout是java里面最重要的布局管理器之一,可以做 ...

  8. learning java AWT 布局管理器 GridBagLayout

    在GridBagLayout布局管理器中,一个组件可以跨越一个或多个网格,并可以设置各网格的大小互不相关. import java.awt.*; public class GridBagTest { ...

  9. learning java AWT 布局管理器 GridLayout

    GridLayout布局管理器将容器分割成纵横线分格的网格,每个网格所占的区域大小相同. import java.awt.*; public class GridLayoutTest { public ...

随机推荐

  1. java中transient关键字的作用

    Java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身.这可以极大地方便网络上的一些操作,但同时,因为涉 ...

  2. TesseractOCR

    简介: OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程. Tesseract:开源的OCR识别引擎,初期Tesser ...

  3. redis 学习笔记(7)-cluster 客户端(jedis)代码示例

    上节学习了cluster的搭建及redis-cli终端下如何操作,但是更常用的场景是在程序代码里对cluster读写,这需要redis-client对cluster模式的支持,目前spring-dat ...

  4. [LeetCode] Nested List Weight Sum 嵌套链表权重和

    Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...

  5. xss篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题

    前言 最早接触安全也是从xss攻击和sql注入攻击开始的. 0x01    跨站脚本攻击漏洞(XSS),是客户端脚本安全中的头号大敌,owasp top10 屡居榜首,由于攻击手法较多,开发者水平不一 ...

  6. 为什么不能在init和dealloc函数中使用accessor方法

    前言 为什么不要在init和dealloc方法中调用getter和setter:Apple在Mac与iOS中关于内存管理的开发文档中,有一节的题目为:"Don'tUse Accessor M ...

  7. time step和采样频率的关系

    当前的采样频率为11025HZ,overlap=0.5,取的是1024个采样点为1帧.则time step为256时的时间长度为11秒.即以11秒为单位分割原始的音频,生成一张语普图. >> ...

  8. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  9. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  10. ActiveMQ_Mqtt的TCP丢包

    现象 Mqtt Consumer应该收到的消息少于预期,登录ActiveMQ的管理页面里的Topics,查看Messages Enqueued发现同样少于理应接收的数量. 定位问题 怀疑是TCP丢包, ...