欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java开发笔记(一百二十六)Swing的窗口

程序员文章站 2022-06-21 09:35:39
前面介绍了AWT界面编程的若干技术,在编码实践的时候,会发现AWT用起来甚是别扭,它的毛病包括但不限于下列几点:1、对中文的支持不好,要想在界面上正常显示汉字,还得在运行时指定额外的运行参数“-Dfile.encoding=gbk”;2、Label标签控件居然无法分行展示文本,连换行这么基本的功能都 ......

前面介绍了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开发笔记(一百二十六)Swing的窗口 Java开发笔记(一百二十六)Swing的窗口



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