Java学习笔记(1)-(GridBagLayout)网格袋布局
学习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)网格袋布局的更多相关文章
- Java学习笔记--Swing用户界面组件
很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- Java学习笔记之---API的应用
Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
随机推荐
- websocket实现单聊
server# @File: ws from flask import Flask, request, render_template from geventwebsocket.handler imp ...
- UWP 后台保存图片
在做UWP的时候,有一个需求,就是点击下载按钮,需要将当前页面中的Image控件中显示的图片保存下来. 既然聊到了下载图片,索性把添加图片也讲一下. 一:给Image控件添加图片 xaml代码: &l ...
- Qt样式表之二:QSS语法及常用样式
一.简述 Qt样式表(以下统称QSS)的术语和语法规则几乎和CSS相同.如果你熟悉CSS,可以快速浏览以下内容.不熟悉的话可以先去W3School - CSS或者本人的CSS博客随笔简单了解一下. 在 ...
- vue中methods中的方法闭包缓存问题
vue中methods中的方法闭包缓存问题 问题背景 需求描述 在路由的导航栏中需要, 判断是否为第一次点击 需要一个标志位来记录是否点击过 现状: 这个标志位只在一个函数中用过.不希望存放全局 希望 ...
- josephus 问题的算法(转载)
Josephus 问题: 一群小孩围成一个圈,任意假定一个数 m,从第一个小孩起,顺时针方向数,每数到第 m 个小孩时,该小孩便离开.小孩不断离开,圈子不断缩小,最后剩下的一个小孩便是胜利者.究竟胜利 ...
- PowerShell~文件操作和对象遍历
ps提供了丰富的文件操作,如建立,删除,改名,移动,复制,文件夹建立,显示文件列表,同时对数组对象的遍历也很方便,如果在使用PS脚本时,希望现时传入参数,可以把参数声明为param,当然需要把它写在文 ...
- 更新项目,uwsgi重新加载和日志文件
uwsgi --reload /var/run/uwsgi.pid uwsgi.pid是uwsgi进程文件 /var/log/uwsgi.log
- PHP pack和unpack函数详解
pack 压缩资料到位字符串之中. 语法: string pack(string format, mixed [args]...); 返回值: 字符串 函数种类: 资料处理 内容说明 本函数用来将资料 ...
- AJPFX浅谈Java性能优化之finalize 函数
★finalize 函数的调用机制 俺经常啰嗦:“了解本质机制的重要性”.所以今天也得先谈谈 finalize 函数的调用机制.在聊之前,先声明一下:Java虚拟机规范,并没有硬性规定垃圾回收该不该搞 ...
- CSV解析
NSString *path = [[NSBundle mainBundle] pathForResource: @"type" ofType:@"csv"]; ...