GridLayout网格布局
网格布局特点:
l 使容器中的各组件呈M行×N列的网格状分布。
l 网格每列宽度相同,等于容器的宽度除以网格的列数。
l 网格每行高度相同,等于容器的高度除以网格的行数。
l 各组件的排列方式为:从上到下,从左到右。
l 组件放入容器的次序决定了它在容器中的位置。
l 容器大小改变时,组件的相对位置不变,大小会改变。
l 设置网格布局行数和列数时,行数或者列数可以有一个为零。若rows为0,cols为3,则列数固定为3,行数不限,每行只能放3个控件或容器。若cols为0,rows为3,则行数固定为3,列数不限,且每行必定有控件,若组件个数不能整除行数,则除去最后一行外的所有行组件个数为:Math.ceil(组件个数/rows)。
Math.ceil(double x):传回不小于x的最小整数值。比如行数为3,组件数为13个,则Math.ceil(13/3)=5,即第一行,第二行组件数各为5个,剩下的组件放在最后一行。
l 若组件数超过网格设定的个数,则布局管理器会自动增加网格个数,原则是保持行数不变。
构造方法摘要 |
GridLayout(): 创建具有默认值的网格布局,即每个组件占据一行一列。 |
GridLayout(int rows, int cols) : 创建具有指定行数和列数的网格布局。Rows为行数,cols为列数。 |
GridLayout(int rows, int cols, int hgap, int vgap) : 创建具有指定行数、列数以及组件水平、纵向一定间距的网格布局。 |
方法摘要 |
|
int |
getColumns() :获取此布局中的列数。 |
int |
getHgap():获取组件之间的水平间距。 |
int |
getRows() :获取此布局中的行数。 |
int |
getVgap() :获取组件之间的垂直间距。 |
void |
removeLayoutComponent(Component comp) :从布局移除指定组件。 |
void |
setColumns(int cols) :将此布局中的列数设置为指定值。 |
void |
setHgap(int hgap):将组件之间的水平间距设置为指定值。 |
void |
setRows(int rows):将此布局中的行数设置为指定值。 |
void |
setVgap(int vgap) :将组件之间的垂直间距设置为指定值。 |
toString():返回此网格布局的值的字符串表示形式。 |
实例一:
//GridLayoutDemo.Java import javax.swing.*; import java.awt.*; public class GridLayoutDemo extends JFrame { public GridLayoutDemo() { setLayout(new GridLayout(0,2)); //设置为网格布局,未指定行数 setFont(new Font("Helvetica", Font.PLAIN, 14)); getContentPane().add(new JButton("Button 1")); getContentPane().add(new JButton("Button 2")); getContentPane().add(new JButton("Button 3")); getContentPane().add(new JButton("Button 4")); getContentPane().add(new JButton("Button 5")); } public static void main(String args[]) { GridLayoutDemo f = new GridLayoutDemo(); f.setTitle("GridWindow Application"); f.pack(); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setLocationRelativeTo(null); //让窗体居中显示 } }
程序结果如下图所示:
实例二:布局一个简单的计算器
思路:对窗体应用边界布局,在NORTH上放置一个文本框,在CENTER上放置一个面板,面板上放置计算器的相应按钮
//GridFrame.Java import java.awt.*; import javax.swing.*; class GridFrame extends JFrame{ //定义面板,并设置为网格布局,4行4列,组件水平、垂直间距均为3 JPanel p=new JPanel(new GridLayout(4,4,3,3)); JTextArea t=new JTextArea(); //定义文本框 //定义字符串数组,为按钮的显示文本赋值 //注意字符元素的顺序与循环添加按钮保持一致 String str[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"}; public GridFrame(String s){ super(s); //为窗体名称赋值 setLayout(new BorderLayout()); //定义窗体布局为边界布局 JButton btn[]; //声明按钮数组 btn=new JButton[str.length]; //创建按钮数组 //循环定义按钮,并添加到面板中 for(int i=0;i<str.length;i++){ btn[i]=new JButton(str[i]); p.add(btn[i]); } //将文本框放置在窗体NORTH位置 getContentPane().add(t,BorderLayout.NORTH); //将面板放置在窗体CENTER位置 getContentPane().add(p,BorderLayout.CENTER); setVisible(true); setSize(250,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); //让窗体居中显示 } public static void main(String[] args){ GridFrame gl=new GridFrame("网格布局计算机!"); } }
程序执行结果如下图:
注意:这里一定要体会通过字符串数组和循环添加按钮的方法,以后添加菜单以及事件处理均采用这种方法,这种方法的好处在于,如果需要修改按钮顺序,直接修改字符串就可以了。而不需要改动添加按钮的代码。
GridLayout网格布局的更多相关文章
- Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布局,AbsoluteLayout绝对布局,RelativeLayout相对布局
在Android中提供了几个常用布局: LinearLayout线性布局 RelativeLayout相对布局 FrameLayout帧布局 AbsoluteLayout绝对布局 TableLayou ...
- Android零基础入门第32节:新推出的GridLayout网格布局
原文:Android零基础入门第32节:新推出的GridLayout网格布局 本期主要学习的是网格布局是Android 4.0新增的布局,和前面所学的TableLayout表格布局 有点类似,不过他有 ...
- Android之GridLayout网格布局
1.相关属性 GridLayout网格布局是4.0之后引入的布局方式! android:columnCount="4" //设置列数(4列) android:rowCount=&q ...
- GridLayout(网格布局)
常用属性: 排列对齐: ①设置组件的排列方式: android:orientation="" vertical(竖直,默认)或者horizontal(水平) ②设置组件的 ...
- android的布局-----GridLayout(网格布局)
学习导图 (一)简介 网格布局由GridLayout所代表,在android4.0之后新增加的布局管理器,因此需要android4.0之后的版本中使用,如果在更早的平台使用该布局管理器,则需要导入相应 ...
- java 图形化小工具Abstract Window Toolit ;布局管理器FlowLayout流式布局;BorderLayout边界布局;GridLayout网格布局;CardLayou重叠卡片布局;BoxLayout方框布局;绝对定位
1.FlowLayout流式布局管理器: FlowLayout布局管理器中,组件像水流一样向某方向流动(排列),遇到障碍(边界)就折回,重头开始排列 .在默认情况下,FlowLayout局管理器从左向 ...
- Android——gridLayout(网格布局)
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android=" ...
- 浅谈GridLayout(网格布局)
Android 4.0 布局-->GridLayout 网格布局 以行列单元格的形式展示内部控件排列,可以实现类似计算机键盘效果 ,也可以实现可自动变行的标签群效果 使用GridLayout , ...
- Android中帧布局-FrameLayout和网格布局-GridLayout
帧布局-FrameLayout 一.概念 帧布局中,容器为每个加入其中的空间创建一个空白的区域(成为一帧).每个空间占据一帧,这些帧会按gravity属性自动对齐. 帧布局的效果是将其中的所有空间叠加 ...
随机推荐
- 一个开源.net混淆器——ConfuserEx (收藏)
一个开源.net混淆器——ConfuserEx http://yck1509.github.io/ConfuserEx/ 由于项目中要用到.net 混淆器,网上搜寻了很多款,比如Dotfuscator ...
- oled的一套stm32实验2(自己的实验)
stm32与OLED屏接口的引脚介绍: CS————GPIOD3: RST————GPIOD4: DC—————GPIOD5: D0——————GPIOD6: D1——————GPIOD7; 上是我参 ...
- python3 购物车小程序,余额写入文件保存
python3 购物车小程序,余额写入文件保存 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan goods = ( ...
- 微信小程序常见的UI框架/组件库总结
想要开发出一套高质量的小程序,运用框架,组件库是省时省力省心必不可少一部分,随着小程序日渐火爆,各种不同类型的小程序也渐渐更新,其中不乏一些优秀好用的框架/组件库. 1:WeUI 小程序–使用教程 h ...
- [Android5.1]ActivityManagerService启动过程分析
ActivityManagerService(简称AMS)是Android系统的关键服务之中的一个.它的主要作用例如以下: 管理系统中全部应用进程的整个生命周期 管理应用进程中的Activity.Se ...
- [Angular] Intercept HTTP requests in Angular
Being able to intercept HTTP requests is crucial in a real world application. Whether it is for erro ...
- boost 库编译选项
boost大部分库仅仅须要包括头文件就可以使用,而有部分须要编译的.例如以下: E:\Qt\Qt3rdlib\boost_1_58_0>bjam --show-libraries The fol ...
- stm32单片机时钟中断的配置
原作者:http://www.eeworld.com.cn/mcu/article_2016082828940.html 配置流程: 1:系统时钟初始化,包括系统时钟和要开放的IO口或者功能的时钟 ...
- IOS手势事件
一, iPhone中处理触摸事件的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式 - (void)touchesBegan:(NSSet *)touches withEve ...
- Java反射学习总结三(静态代理)
反射最常见的应用就是代理模式了. 本文先简单介绍一下代理模式,并写一个静态代理的例子.为下一篇重要的动态代理做点铺垫 代理模式的作用是: 为其他对象提供一种代理以控制对这个对象的访问. 另外在某些情况 ...