前面介绍了如何通过AWT显示程序的窗口界面,那么要怎样在该窗口上面添加丰富多样的控件呢?注意Frame类是个窗口工具,它由窗楣(标题栏)与窗体(窗口主界面)两部分组成,故而Frame类只对整个窗口统筹规划,本身并不能直接添加各类控件。实际的控件管理操作交给了专门的Panel面板工具,由面板接管窗口主界面,在面板上添加和删除控件,Frame对象只需调用add方法把面板添加到窗口即可。
接下来以常见的按钮控件为例,演示一下如何在面板上添加按钮、进而在窗口界面显示按钮的过程。按钮控件名叫Button,按钮上的文字既能在构造方法中传入,也能通过setLabel方法来设置。不过按钮的大小无法通过setSize方法设置,必须调用setPreferredSize方法才行。若要在窗口上显示一个按钮,则需在原来的窗口代码中补充如下代码片段:

		Panel panel = new Panel(); // 创建一个面板
Button button = new Button("点我"); // 创建一个按钮
// 设置空间大小要用setPreferredSize,因为setSize不管用
button.setPreferredSize(new Dimension(200, 30)); // 设置按钮的推荐宽高
panel.add(button); // 在面板上添加按钮
frame.add(panel); // 在窗口上添加面板

运行添加了按钮控件的窗口代码,屏幕中央弹出了如下图所示的小窗。


有的朋友可能会发现,按钮文字并未显示正确的汉字,而是变成乱码了。这是因为Eclipse配置了UTF8字符编码,而操作系统默认的汉字编码是GBK,两边的字符编码标准不一致导致了乱码。倘若Eclipse的工作空间配置为GBK编码,则不会出现汉字乱码的情况。当然,即使Eclipse配置成UTF8编码,给程序加入运行参数“-Dfile.encoding=gbk”,这样运行时也能正常显示汉字。具体步骤说明如下:右击测试用的代码文件,在右键菜单中依次选择“Run As”——“Run Configurations...”,此时会弹出如下图所示的配置界面。


单击该界面右边的Arguments选项卡,在下面的VM arguments输入框中填入运行参数“-Dfile.encoding=gbk”,然后单击界面下方的Run按钮,运行窗口的按钮上就会正确显示汉字了。
如同窗口右上角的叉号按钮那样,面板上的按钮也允许由程序员定制单击动作的处理,调用按钮对象的addActionListener方法表示给它注册一个点击监听器,而按钮的单击事件会触发监听器的actionPerformed方法,有需要执行的代码放进该方法就好了。下面是给按钮添加单击事件的代码例子:

		button.addActionListener(new ActionListener() { // 给按钮注册一个点击监听器
@Override
public void actionPerformed(ActionEvent e) { // 发生了单击事件
button.setLabel(getNowTime() + " 点击了按钮"); // 设置按钮的文本
}
});

以上代码里的getNowTime方法主要用来获取当前时间,方便观察每次单击动作的发生时刻,该方法的实现代码示例如下:

	// 获取当前的时间字符串
public static String getNowTime() {
// 创建一个日期格式化的工具
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
// 将当前时间按照指定格式输出格式化后的时间字符串
return sdf.format(new Date());
}

运行添加了单击事件的按钮测试代码,接着单击窗口上的按钮控件,单击之后的窗口界面如下图所示:


看到按钮上的文字发生了变化,可见刚才注册的点击监听器果然奏效了。
最后总结一下Button工具提供的几个方法,它们的简要说明见下:
setLabel:设置按钮上的文字标签。
setPreferredSize:设置按钮的推荐宽高。
addActionListener:给按钮注册一个点击监听器。
setEnabled:设置按钮是否可用。true表示启用按钮,false表示禁用按钮。


更多Java技术文章参见《Java开发笔记(序)章节目录

Java开发笔记(一百一十八)AWT按钮的更多相关文章

  1. Java开发笔记(三十八)利用正则表达式校验字符串

    前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...

  2. Java开发笔记(二十八)布尔包装类型

    前面介绍了数值包装类型,因为不管是整数还是小数,它们的运算操作都是类似的,所以只要学会了Integer的用法,其它数值包装类型即可一并掌握.但是对于布尔类型boolean来说,该类型定义的是“true ...

  3. Java开发笔记(四十八)类的简单继承

    前面介绍了类的基本用法,主要是如何封装一个类的各项要素,包括成员属性.成员方法.构造方法等,想必大家对类的简单运用早已驾轻就熟.所谓“物以类聚,人以群分”,之所以某些事物会聚在一起,乃是因为它们拥有类 ...

  4. Java开发笔记(五十八)简单接口及其实现

    前面介绍了抽象方法及抽象类的用法,看似解决了不确定行为的方法定义,既然叫唤动作允许声明为抽象方法,那么飞翔.游泳也能声明为抽象方法,并且鸡类涵盖的物种不够多,最好把这些行为动作扩展到鸟类这个群体,于是 ...

  5. Java开发笔记(六十八)从泛型方法探究泛型的起源

    前面介绍各种容器之时,通过在容器名称后面添加包裹数据类型的一对尖括号,表示该容器存放的是哪种类型的元素.这样一来总算把Java当中的各类括号都凑齐了,例如包裹一段代码的花括号.指定数组元素下标的方括号 ...

  6. Java开发笔记(七十八)面向对象的后门——反射

    作为一门面向对象的编程语言,Java认为一切皆是对象,每个对象都能归属于某个类,甚至每个类均可提取出一种特殊的类型,即Class类型.早在前面介绍多态的时候,就提到每个类都存在独一无二的基因,通过比较 ...

  7. Java开发笔记(四十)日期与字符串的互相转换

    前面介绍了如何通过Date工具获取各个时间数值,但是用户更喜欢形如“2018-11-24 23:04:18”这种结构清晰.简洁明了的字符串,而非啰里八唆依次汇报每个时间单位及其数值的描述.既然日期时间 ...

  8. Java开发笔记(二十九)大整数BigInteger

    早期的编程语言为了节约计算机的内存,给数字变量定义了各种存储规格的数值类型,比如字节型byte只占用一个字节大小,短整型short占用两个字节大小,整型int占用四个字节大小,长整型long占用八个字 ...

  9. Java开发笔记(三十二)字符型与整型相互转化

    前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允 ...

  10. Java开发笔记(三十五)字符串格式化

    前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可.但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部 ...

随机推荐

  1. MySQL 硬链接删除大表

    在清理整个大表时,我们推荐使用drop,而非delete.但是如果表实在太大,即使是drop,也需要消耗一定的时间.这时可以利用linux的硬连接来快速删除大表,操作过程如下:有一个大表test,共有 ...

  2. 持续集成学习1 gitlab和jenkins安装

    一.gitlab安装参照链接 https://www.cnblogs.com/linuxk/p/10100431.html 二.安装jenkins 1.获取jenkins源码包 https://blo ...

  3. learning scala someElements

    The Scala collections library provides specialised implementations for Sets of fewer than 5 values ( ...

  4. ArrayList 集合 简单运用

     集合 遍历 import java.util.ArrayList; class Demo02 { public static void main(String[] args) { // 创建Arra ...

  5. 前端微信小程序仿菜谱精灵

    需求描述及交互分析 设计思路和相关知识点 底部标签导航设计 幻灯片轮播效果设计 菜谱专题列表显示设计 菜谱专题详情设计 菜谱分类设计 幻灯片轮播效果动态切换展示一些美食图片 若本号内容有做得不到位的地 ...

  6. 群晖采用root用户登录

    在控制面板中开启 ssh 登录 通过有 管理员权限的用户登录 通过输入 sudo -i 或者 sudo su - , 然后输入当前用户密码, 进入 root 输入如下命令可以修改root 用户的密码 ...

  7. vscode快捷键,让你脱离鼠标,敲代码嗖嗖的

    蓝色为本人需要经常用到的,可忽略 vsCode软件相关 显示资源管理器:Ctrl + Shift + E 显示搜索: Ctrl + Shift + F 显示git:Ctrl + Shift + G 显 ...

  8. 平安寿险Java面试-社招-四面(2019/08)

    个人情况 2017年毕业,普通本科,计算机科学与技术专业,毕业后在一个二三线小城市从事Java开发,2年Java开发经验.做过分布式开发,没有高并发的处理经验,平时做To G的项目居多.写下面经是希望 ...

  9. Win10系统下安装ubuntu16.04双系统-常见问题解答

    Win10系统下安装ubuntu16.04双系统-常见问题解答 1. 安装ubuntu16.04.2系统 磁盘分区形式有两种:GPT和MBR,关系到设置引导项.在win10下压缩出500GB空间给ub ...

  10. 大数据 | 分布式文件系统HDFS 练习

    本次作业来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 利用Shell命令与HDFS进行交互 以”./bin/dfs ...