Java开发笔记(一百一十九)AWT布局
前面介绍了如何在窗口上添加一个按钮,可是每个软件界面都包含了许多控件,这些控件又是按照什么规则在界面上排列的呢?仍以按钮为例,假如要在窗口上依次添加多个按钮,那么界面会怎样显示这些按钮?想当然的话,按钮们可能从左往右排列,也可能从上往下排列,也可能后面的按钮在原处覆盖掉前面的按钮,究竟AWT会以哪种方式显示多个按钮,还得具体编码开展实地验证才行。下面便是往程序窗口先后添加五个按钮的代码片段:
frame.setSize(400, 120); // 必须设置宽高,否则没有窗体
Panel panel = new Panel(); // 创建一个面板
panel.add(new Button("第一个按钮")); // 在面板上添加一个按钮
panel.add(new Button("第二个按钮")); // 在面板上添加一个按钮
panel.add(new Button("第三个按钮")); // 在面板上添加一个按钮
panel.add(new Button("第四个按钮")); // 在面板上添加一个按钮
panel.add(new Button("第五个按钮")); // 在面板上添加一个按钮
frame.add(panel); // 在窗口上添加面板
运行上述的测试代码,观察到如下图所示的窗口界面。
这下眼见为实了,AWT的默认布局原来是从左往右依次排列控件,遇到一行放不下的情况,则另起一行放置新控件。这种默认布局被称作流式布局,可以看作是流水账记事,跟日常的手写差不多,手写一段文字也是从左往右书写,写满一行后另起一行书写。流式布局的大名叫做FlowLayout,调用面板对象的setLayout方法即可设置指定的布局类型。不过从界面效果看,流式布局与手写有一点不同,手写的时候每行文字都是靠左对齐,而流式布局的内部控件却是居中对齐。若想让流式布局也采取靠左对齐的格式,则需调用布局对象的setAlignment方法设置对齐格式。如此一来,完全等同手写规则的布局代码应当改为以下这般:
FlowLayout layout = new FlowLayout(); // 创建一个流式布局
layout.setAlignment(FlowLayout.LEFT); // 设置对齐方式为靠左对齐
panel.setLayout(layout); // 指定面板采用流式布局
除了流式布局,AWT还提供了其它两种常见的布局类型,分别是网格布局GridLayout,以及边界布局BorderLayout。网格布局类似表格,采取多行多列的界面划分,并且允许程序员指定行数与列数。其中网格对象的setRows方法可用于设置行数,setColumns方法可用于设置列数,也可在GridLayout的构造方法中直接指定行数和列数。现在准备把面板的流式布局换成五行单列的网格布局,更改后的布局代码如下所示:
GridLayout layout = new GridLayout(5, 1); // 创建一个网格布局,有五行一列
layout.setRows(5); // 设置行数为5
layout.setColumns(1); // 设置列数为1
panel.setLayout(layout); // 指定面板采用网格布局
运行以上的网格布局代码,观察到如下图所示的窗口界面。
如图可见,此时的五个按钮果然形成了五行单列的网格结构。
至于边界布局,仿佛遵照古人的国土观念:本国位于天地之中,四周分布着其它部族包括东夷、南蛮、西戎、北狄,具体方位遵循地图学的“上北下南、左西右东”格局。边界布局自身无需调用专门的方法,而是由面板对象在调用add方法添加控件之时,顺便指定该控件在边界布局中所处的方位,例如EAST代表东边也就是布局右侧,WEST代表西边也就是布局左侧,SOUTH代表南边也就是布局下方,NORTH代表北边也就是布局上方,CENTER代表中央也就是面板正中。使用边界布局改写后的代码片段示例如下:
panel.setLayout(new BorderLayout()); // 指定面板采用边界布局
panel.add(new Button("东边的按钮"), BorderLayout.EAST); // 在面板的东边(右侧)添加按钮
panel.add(new Button("西边的按钮"), BorderLayout.WEST); // 在面板的西边(左侧)添加按钮
panel.add(new Button("北边的按钮"), BorderLayout.NORTH); // 在面板的北边(上方)添加按钮
panel.add(new Button("南边的按钮"), BorderLayout.SOUTH); // 在面板的南边(下方)添加按钮
panel.add(new Button("中间的按钮"), BorderLayout.CENTER); // 在面板的中间位置添加按钮
运行以上的边界布局代码,观察到如下图所示的窗口界面。
从上面的界面效果可知,五个按钮分别排列在上下左右中一共五个方位。
更多Java技术文章参见《Java开发笔记(序)章节目录》
Java开发笔记(一百一十九)AWT布局的更多相关文章
- Java开发笔记(三十九)日期工具Date
Date是Java最早的日期工具,编程中经常通过它来获取系统的当前时间.当然使用Date也很简单,只要一个new关键字就能创建日期实例,就像以下代码示范的那样: // 创建一个新的日期实例,默认保存的 ...
- Java开发笔记(八十九)缓存字节I/O流
文件输出流FileOutputStream跟FileWriter同样有个毛病,每次调用write方法都会直接写到磁盘,使得频繁的写操作性能极其低下.正如FileWriter搭上了缓存兄弟Buffere ...
- Java开发笔记(二十九)大整数BigInteger
早期的编程语言为了节约计算机的内存,给数字变量定义了各种存储规格的数值类型,比如字节型byte只占用一个字节大小,短整型short占用两个字节大小,整型int占用四个字节大小,长整型long占用八个字 ...
- Java开发笔记(四十九)关键字super的用法
前面介绍了如何从Bird类继承而来Swallow类,按道理子类应当继承父类的所有要素,但是对于构造方法来说,Swallow类仅仅继承了Bird类的默认构造方法,并未自动继承带参数的构造方法.如果子类想 ...
- Java开发笔记(五十九)Java8之后的扩展接口
前面介绍了接口的基本用法,有心的朋友可能注意到这么一句话“在Java8以前,接口内部的所有方法都必须是抽象方法”,如此说来,在Java8之后,接口的内部方法也可能不是抽象方法了吗?之所以Java8对接 ...
- Java开发笔记(六十九)泛型类的定义及其运用
前面从泛型方法的用法介绍到了泛型的起源,既然单个方法允许拥有泛化的参数类型,那么一个类也应当支持类级别的泛化类型,例如各种容器类型ArrayList.HashMap等等.一旦某个类的定义代码在类名称后 ...
- Java开发笔记(七十九)利用反射技术操作私有属性
早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装.继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性 ...
- Java开发笔记(三十二)字符型与整型相互转化
前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允 ...
- Java开发笔记(三十八)利用正则表达式校验字符串
前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...
- Java开发笔记(四十)日期与字符串的互相转换
前面介绍了如何通过Date工具获取各个时间数值,但是用户更喜欢形如“2018-11-24 23:04:18”这种结构清晰.简洁明了的字符串,而非啰里八唆依次汇报每个时间单位及其数值的描述.既然日期时间 ...
随机推荐
- LeetCode 1093. Statistics from a Large Sample
原题链接在这里:https://leetcode.com/problems/statistics-from-a-large-sample/ 题目: We sampled integers betwee ...
- 极限挑战----3小时完成OA系统(失败)
今天老师要求三小时把OA系统做出了,之前一点也没接触过,对其不了解,而且这几天一直把时间放在六级了,对Web重视有点少. 最终我只做了登录和校验,可以显示富文本框,但不能提交数据库. 总之还有还多没有 ...
- ArrayList 集合:库存管理
import java.util.ArrayList; import java.lang.Integer; import java.util.Scanner; import java.util.Ran ...
- echo如何输出带颜色的文本
本文链接:https://blog.csdn.net/qualcent/article/details/7106483 ######################################## ...
- Java串口通信--------基于RXTX (附带资源地址)
最近帮老师做了一个小项目,一个牧场公司想用传感器收集一些环境信息,记录到数据库里去,然后加以分析查看.这里面和传感器通信用到了串口通信,我也是接触了一下,把用到的东西分享出来. 准备工作: RXTX: ...
- ICEM-一种网格画法的思考
原视频下载链接:https://pan.baidu.com/s/1kV4Zj3x 密码: uthc
- CentOS 7 安装FTP服务器(vsftpd)
FTP是安装各种环境前的预备环节,因为我们要把下载好的安装包上传上去.其次,在一个团队中,FTP服务器为多用户提供了一个文件储存场所,总之是一个非常实用的工具. 1.安装vsftpd # 首先要查看你 ...
- Chrome DevTools 之 Network,网络加载分析利器
链接:https://www.jianshu.com/p/471950517b07 虽然一直在用Chrome DevTools,但大多停留在常用的功能和调试上,比如Elements/Network/S ...
- db2常用操作命令
1. 打开命令行窗口 #db2cmd 2. 打开控制中心 # db2cmd db2cc 3. 打开命令编辑器 db2cmd db2ce =====操作数据库命令===== 4. 启动数据库实例 #db ...
- vue mpvue 上拉加载更多示例代码
vue 上拉加载更多示例代码 可以比较简单的改为 mpvue , 去除滚动判断,直接放在 onReachBottom 周期即可. html <div id="app"> ...