Java开发笔记(一百二十六)Swing的窗口
前面介绍了AWT界面编程的若干技术,在编码实践的时候,会发现AWT用起来甚是别扭,它的毛病包括但不限于下列几点:
1、对中文的支持不好,要想在界面上正常显示汉字,还得在运行时指定额外的运行参数“-Dfile.encoding=gbk”;
2、Label标签控件居然无法分行展示文本,连换行这么基本的功能都不支持,真是让人醉了;
3、AWT没提供专门显示图像的控件,只能由程序员自己定义单独的图像视图,繁琐的操作立马吓跑一票人;
考虑到AWT属于Java1时代的产物,种种不足之处尚且情有可原。可是AWT拿来开发桌面程序的效果实在糟糕,为此Java2又推出了AWT的升级版——Swing工具包。Swing工具一方面改进了桌面开发的编码细节,另一方面完善了系统平台的兼容性,这是因为其内部改为使用Java实现,所以采用Swing编写的程序可以跨平台运行,而不像AWT那样依赖于宿主系统的图形函数。
由于Swing与AWT同属Java家族,为了让开发者在AWT与Swing之间方便衔接,因此Swing控件的用法类似于对应的AWT控件,不管是控件名称还是控件方法,总能找到你所熟悉的味道。以窗口框架为例,AWT的框架名叫Frame,Swing的框架名叫JFrame,仅仅在开头加了个J。两个框架的方法调用也差不多,主要的区别主要有以下两点:
1、单击窗口右上角的叉号按钮,单击它理应关闭窗口,倘若使用AWT的Frame类实现默认关闭功能,则需为窗口注册监听器,很简单的功能也得需要如下好几行代码:
frame.addWindowListener(new WindowAdapter() { // 为窗口注册监听器,实现窗口关闭功能
public void windowClosing(WindowEvent e) { // 点击了窗口右上角的叉号按钮
frame.dispose(); // 关闭窗口
}
});
使用Swing的JFrame类实现同样功能的话,换成新增的setDefaultCloseOperation方法,只要如下一行代码就搞定了:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置默认的关闭操作:退出程序
2、JFrame的setBackground方法不起作用,只能在面板JPanel那里设置背景。这个JPanel正是对应AWT的Panel面板类,二者的用法没什么太大差别,一样占据窗口的主体区域,一样在上面添加各类控件。JPanel唯一能够出彩的地方,便是调用setBackground方法给窗体设置背景了,背景设置的调用代码示例如下:
JPanel panel = new JPanel(); // 创建一个面板
panel.setBackground(Color.GREEN); // 设置面板的背景
frame.add(panel); // 在窗口上添加面板
此外按钮控件也有较大的完善,Swing中的按钮控件名叫JButton,它与AWT的Button比起来,改进之处主要有下列三点:
1、AWT默认的按钮外观是完全的灰色,毫无层次感。而JButton默认的外观是带立体效果的图标,层次分明更有摩登范儿。
2、AWT的许多控件在设置文本之时,有的调用setLabel方法,有的调用setText方法,各叫各的并不统一。而Swing从JButton开始,所有的控件文本设置方法都改为统一的setText方法,原先的setLabel方法已被注解标记为已废弃。
3、最重要的一点,Swing解决了中文的字符编码问题,即使代码文件采取UTF-8编码,运行Swing程序也无需额外的运行参数去设置文件的字符编码,窗口界面上的中文始终正常显示,不会出现AWT因未指定字符编码而产生的乱码问题。
除了上面的几点,JButton的用法类似Button,很多方法都能直接拿来调用,譬如下面的代码例子演示了某个按钮的单击事件处理过程:
JButton button = new JButton("点我"); // JButton无需另外设置文件的字符编码
button.setPreferredSize(new Dimension(200, 30)); // 设置按钮的推荐宽高
button.addActionListener(new ActionListener() { // 给按钮注册一个点击监听器
@Override
public void actionPerformed(ActionEvent e) { // 发生了单击事件
button.setText(getNowTime() + " 点击了按钮"); // 设置按钮的文本
}
});
button.setFont(new Font("中号", Font.PLAIN, 16)); // 设置按钮文字的字体与大小
panel.add(button); // 在面板上添加按钮
运行以上的演示代码,弹出Swing的程序窗口,按钮单击前后的界面分别如下面两图所示,从中可见JButton的庐山真面目。

更多Java技术文章参见《Java开发笔记(序)章节目录》
Java开发笔记(一百二十六)Swing的窗口的更多相关文章
- Java开发笔记(二十六)方法的输出参数
前面介绍了方法的输入参数,与输入参数相对应的则为输出参数,输出参数也被称作方法的返回值,意思是经过方法的处理最终得到的运算数值.这个返回值可能是整型数,也可能是双精度数,也可能是数组等其它类型,甚至允 ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- Java开发笔记(三十六)字符串的常用方法
不管是给字符串赋值,还是对字符串格式化,都属于往字符串填充内容,一旦内容填充完毕,则需开展进一步的处理.譬如一段Word文本,常见的加工操作就有查找.替换.追加.截取等等,按照字符串的处理结果异同,可 ...
- Java开发笔记(八十六)通过缓冲区读写文件
前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作“字符流I/O”,其中字母I代表输入Input,字母O ...
- Java开发笔记(二十四)方法的组成形式
经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:1.一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力:2.部分代码描述的是 ...
- Java开发笔记(二十五)方法的输入参数
前面通过main方法介绍了方法的定义形式,对于方法的输入参数来说,还有几个值得注意的地方,接下来分别对输入参数的几种用法进行阐述.一个方法可以有输入参数,也可以没有输入参数,倘若无需输入参数,则方法定 ...
- Java开发笔记(二十八)布尔包装类型
前面介绍了数值包装类型,因为不管是整数还是小数,它们的运算操作都是类似的,所以只要学会了Integer的用法,其它数值包装类型即可一并掌握.但是对于布尔类型boolean来说,该类型定义的是“true ...
- Java开发笔记(二十九)大整数BigInteger
早期的编程语言为了节约计算机的内存,给数字变量定义了各种存储规格的数值类型,比如字节型byte只占用一个字节大小,短整型short占用两个字节大小,整型int占用四个字节大小,长整型long占用八个字 ...
- Java开发笔记(四十六)类的构造方法
前面介绍了如何定义一个简单的类,以及它的成员属性和成员方法,从示例代码可以看到,不管是OrangeSimple还是OrangeMember,都要先利用关键字new创建一个实例,然后才能通过实例名称访问 ...
- Java开发笔记(五十六)利用枚举类型实现高级常量
前面介绍了联合利用final和static可实现常量的定义,该方式用于简单的常量倒还凑合,要是用于复杂的.安全性高的常量,那就力不从心了.例如以下几种情况,final结合static的方式便缺乏应对之 ...
随机推荐
- freemarker使用shiro标签(spring boot)
freemarker使用shiro标签(spring boot) 2018年07月03日 14:20:37 niu_sayok 阅读数:348更多 个人分类: freeMarkerShiro 首先 ...
- eclipse 配置python环境 json 插件
windows->install new software add 配置python 环境: name:pydev(可随意写) url:http://pydev.org/updates/ (如果 ...
- prisma mongodb 试用
prisma 已经支持mongodb了,我们需要做的就是安装新版本的prisma cli,后然初始化项目使用 环境准备 安装cli 注意使用新版本(prisma/1.32.2) 低版本有坑 npm i ...
- HTML5 离线应用
一.离线应用cache manifes文件 HTML5中构建了一个离线(无网络状态)应用,只需创建一个cache manifest文件 可以配置需要的缓存的资源,网络无连接应用任然可以使用,本地读取缓 ...
- NetHack 备忘
NetHack 备忘 常用操作 操作均区分大小写 上下左右移动 y k u h l b j n / 查看地图上的东西 < 上楼 > 下楼 c 关门 部分怪不会开门 a 使用(工具) d 丢 ...
- Python入门(一)-打开世界之Hello World
关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 本篇文章同步微信公众号 欢迎大家关注我的微信公众号:「醉翁猫咪」 今天我们来用Python向世界说声Hello World,人生 ...
- Hadoop 在启动或者停止的时候需要输入yes确认问题
启动或者停止hadoop的时候,信息如下: Stopping namenodes on [hadoop1 hadoop2] The authenticity of host 'hadoop2 (172 ...
- Portainer实战
Portainer是一个轻量级的Docker环境管理UI,可以管理docker host和docker swarm(我主要看中了能管理swarm这个,毕竟市面上能管理swarm的平台不多).之所以说是 ...
- 刷题3:给定一个数组 nums,判断 nums 中是否存在三个下标 a,b,c数相加等于targe且a,b,c不相等
题目: 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,下标 ,a ,b , c 对应数相加等于 targe 找出所有满足条件且不重复的三元组下标 解析: ...
- 【AE软件】视频添加字幕
1.导入视频 2.将视频拖入大屏幕 3.在下面点击右键——新建——文本 4.文字属性设置