学习JAVA-布局管理的时候,在书上看到了这么一段话:GridBagLayout的功能非常强大,使用是也比较复杂,考虑到一般的读者很少会使用到这种管理,这里不做介绍。然书本就跳过了,为什么功能强大却很少会使用呢?或者因为那个“一般”?

于是我到网上查了查GridBagLayout(网格布袋布局)的用法。

感谢:链接

(0_o)


两个主要的类:

  GridBagLayout();布局管理器,和其他的布局管理器用法差不多;

  GridBagConstraints();约束管理器,主要用来约束放到GridBagLayout中的组件的属性,比如:位置,大小,外部填充,内部填充等等属性;

主要的约束及其值:

  普通约束:int gridx,gridy;——组件插入哪个指定的网格,如左上角的网格坐标为0,0;默认为RELATIVE,即在上一个add的表格坐标上加一;如上一个是(1,1)则               设置(RELATIVE,RELATIVE)后,添加的下一个组件坐标为(2,2);

       int  gridwidth,gridheight;——组件横向,纵向横跨多少个网格,默认值为1,有两个值:REMAINDER(设置此约束后,下一个添加的就是此行或则和列的                     最后一个,一般列不常用,经常用来换行),RELATIVE(该组件是该行或者列的倒数第二个,常用在纵向上);

  伸缩约束:int fill;——指在窗口被伸缩时组件如何跟着自动伸缩;

          有四个值:NONE:组件不动,不占空白区域;HORIZONTAL:组件可以水平方向上伸 缩;VERTICAL:垂直伸缩;BOTH:双向伸缩;

       int weightx, weighty:组件在横向和纵向上如何按比例伸缩;

  组件尺寸约束规则:int ipadx, ipady:即inner padding x and y,即组件的内部填充尺寸,比如一个按钮,就是按钮的文字和按钮边框之间的空间;

           Insets insets:规定了外部填充区域的大小,实际指定了组件实施区域的边间直接的距离,比如一个空间和网格之间的空间;

           anchor:组件在显示区域中的位置,总共有9个方位,分别是东南西北中、东北、西北、东南、西南,英文就不枚举了,比如南是SOUTH,东              北是NORTHEAST,其它类推;

  规则:每次GridBagLayout只能根据所设置的GridBagConstraints约束


try:

 import java.awt.*;
 import javax.swing.*;

 public class GridBagLayoutDemo {
     private static final int EXIT_ON_CLOSE = 0;
     private JFrame f=new JFrame("GradBagLayout test");
     //创建网格布局
     private GridBagLayout gbl=new GridBagLayout();
     //创建月暑期
     private GridBagConstraints gbc=new GridBagConstraints();
     //创建10存放按钮的空间
     private JButton but[]=new JButton[11];

     //添加按钮方法
     private void addButton(JButton but) {
         //给网格包布局设定约束器
         gbl.setConstraints(but, gbc);
         f.add(but);
     }

     //
     public void init() {
         //出事还10个按钮
         for(int i=0;i<11;i++) {
             but[i]=new JButton("Button"+i);

         }

         //设定框架布局模式
         f.setLayout(gbl);
         //设定伸缩为两个方向的
         gbc.fill=GridBagConstraints.BOTH;
         //设定纵向肾伸缩比例为1:1
         gbc.weighty=1;
         //设置纵向的伸缩比例为1:1
         gbc.weightx = 5; // 第一行的三个都是1:1:1
         addButton(but[0]);
         addButton(but[1]);
         addButton(but[2]);
         //这句话的意思是,添加完第三个按钮,接下来的一个位置就是第一行的最后一个,所以添加完第四个就换行了
         gbc.gridwidth = GridBagConstraints.REMAINDER;
         addButton(but[3]);//此行的最后一个
         // 第2行1个按钮,仍然保持REMAINDER换行状态
         addButton(but[4]);  

         // 第3行2个按钮,分别横跨2格
         gbc.gridwidth= 2;
         gbc.weightx = 1;
         addButton(but[5]);
         gbc.gridwidth = GridBagConstraints.REMAINDER;//本行最后一个单元格
         addButton(but[6]); 

         //7纵跨2个格子,8、9一上一下
         gbc.gridheight = 2;
         gbc.gridwidth = 1;
         gbc.weightx = 1;
         addButton(but[7]); // 由于纵跨2格因此纵向伸缩比例不需要调整,默认为1*2格,比例刚好

         gbc.gridwidth = GridBagConstraints.REMAINDER;
         gbc.gridheight=1;
         gbc.weightx=3;
         addButton(but[8]);
         addButton(but[9]);  

         gbc.gridx=2;
         gbc.gridy=5;
         gbc.ipadx=1000;
         gbc.ipady=500;
         //设置外部填充区域
         Insets i=new Insets(10,10,10,10);
         gbc.insets=i;
         gbc.anchor=GridBagConstraints.EAST;
         addButton(but[10]);

         f.pack();
         f.setDefaultCloseOperation(EXIT_ON_CLOSE);
         f.setVisible(true);  

     }

     public static void main(String[] args) {
         new GridBagLayoutDemo().init();
     }

 }

运行效果:


学到:

1、GridBagConstraints声明的时候不要给所有参数,直接声明GridBagConstraints gbc=new GridBagConstraints();需要设置哪个约再设置;如gbc.fill=GridBagConstraints.BOTH;

2、网格包布局是网格布局的升级版,也是网格布局和流布局的结合(如果约束器都是默认的话);

Java学习笔记(1)-(GridBagLayout)网格袋布局的更多相关文章

  1. Java学习笔记--Swing用户界面组件

    很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...

  2. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  3. Java学习笔记之---API的应用

    Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...

  4. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  5. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  6. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  7. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  8. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  9. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

随机推荐

  1. Educational Codeforces Round 46 (Rated for Div. 2) E. We Need More Bosses

    Bryce1010模板 http://codeforces.com/contest/1000/problem/E 题意: 给一个无向图,求图的最长直径. 思路:对无向图缩点以后,求图的最长直径 #in ...

  2. 转 PHP scandir() 函数

    实例 列出 images 目录中的文件和目录: <?php $dir = "/images/"; // 以升序排序 - 默认 $a = scandir($dir); // 以 ...

  3. js数组去重的三种方式的比较

    做前端的,一般实现功能是主要的,但是重中之重却是在做到功能完善的情况下提高性能. 1.遍历数组法 实现的思路:构建一个新的数组存放结果,for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组 ...

  4. Java开发笔记(九十五)NIO配套的文件工具Files

    NIO不但引进了高效的文件通道,而且新增了更加好用的文件工具家族,包括路径组工具Paths.路径工具Path.文件组工具Files.先看路径组工具Paths,该工具提供了静态方法get,输入某个文件的 ...

  5. JavaScript中,有三种常用的绑定事件的方法

    要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的 ...

  6. gp服务输出的结果文件输出到绝对路径

    gp服务跟本地用arcmap执行gp有个不同,就是输出的文件一般只能输出到arcgis server默认的output目录里面(arcgis server有此限制,无论怎么配还是写到output目录里 ...

  7. 一个Java编写的小玩意儿--脚本语言解释器(一)

    今天开始想写一个脚本语言编译器.在这个领域,我还是知道的太少了,写的这个过程肯定是艰辛的,因为之前从来没有接触过这类的东西.写在自己的博客里,算是记录自己的学习历程吧.相信将来自己有幸再回过头来看到自 ...

  8. Xilinx器件原语

    原语,其英文名为primitive,是FPGA厂商针对其器件特征开发的一系列常用模块的名称.原语是FPGA芯片中基本元件,代表FPGA中实际拥有的硬件逻辑单元,如LUT,D触发器,RAM等.相当于软件 ...

  9. webuploader上传工具

    http://fex.baidu.com/webuploader/getting-started.html#显示用户选择 Html部分 首先准备dom结构,包含存放文件信息的容器.选择按钮和上传按钮三 ...

  10. NYOJ 题目42 一笔画问题

    一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下 ...