好文档 - 专业文书写作范文服务资料分享网站

MyEclipse 6 第十八章 图形界面开发--AWT,Swing,SWT

天下 分享 时间: 加入收藏 我要投稿 点赞

第十八章 图形界面开发--AWT,Swing,

SWT

第十八章 图形界面开发--AWT,Swing,SWT.............................................................1

18.1 图形界面简介.....................................................................................................1

18.1.1 概述.........................................................................................................2 18.1.2 Java的GUI类库发展简介..........................................................................3 18.1.3 标准图形界面的组成................................................................................4 18.1.4 常见的可视化界面开发软件.....................................................................5 18.2 Applet开发..........................................................................................................6

18.2.1 Applet的HelloWorld开发...........................................................................6 18.2.2 Applet的运行方式.....................................................................................7 18.2.3 Applet的生命周期...................................................................................13 18.2.4 Applet安全限制和签名Applet..................................................................15 18.2.5 Applet参数传递和JavaScript互操作........................................................19 18.2.6 从JDK的自带例子中学习Applet和图形界面编程....................................29 18.3 使用Matisse4MyEclipse开发AWT/Swing应用..................................................30

18.3.1 安装开发插件........................................................................................30 18.3.2 可视化开发Applet..................................................................................30 18.3.3 调整生成代码和换肤..............................................................................39 18.3.4 开发UDP局域网聊天桌面应用...............................................................41 18.3.5发布应用、启动文件制作........................................................................52 18.4 使用Jigloo插件开发SWT/Swing应用...............................................................59

18.4.1 Jigloo插件的下载安装............................................................................59 18.4.2 搭建SWT开发环境.................................................................................60 18.4.3 使用Jigloo开发SWT应用.......................................................................65 18.4.4 Jigloo开发SWT的常见问题....................................................................69 18.4.5 Jigloo 开发 Swing应用..........................................................................71 18.5 参考资料..........................................................................................................73

18.5.1 网址.......................................................................................................73 18.5.2 Java应用播放声音的代码示例................................................................74 18.5.3 JavaScript 包的英文参考文档................................................................78 16.5.4 Eclipse中插件的安装..............................................................................83 18.6 小结.................................................................................................................84

18.1 图形界面简介

本节简要讨论图形界面,由于定位是开发为主,所以理论之处的讲解并不多,希望读者理解,并自行寻找更多资料补充自学。另外提示,对图形界面无兴趣,或者工作根本用不到

1

刘长炯著

的读者,完全可以忽略本章的内容。

18.1.1 概述

在本书刚开始计划写的时候,选的书名是《MyEclipse 6 Java EE 开发中文手册》,后来才改成了现在的这个名字:《MyEclipse 6 Java 开发中文教程》。这是因为Java的覆盖面要比Java EE大些,Java的开发也不是除了做做网页(一般加以专业称呼为Java EE开发),而且考虑到实际情况,在一般公司中经常出现维护老项目的现象,如果是在校学子做毕业设计,也会用到一些目前来说不是太“主流”的技术,在Java中,经常就是指图形界面开发。那么图形界面开发到底在实际中有没有用?回答是肯定的:有!大家想想,打开Windows后看到的是什么?窗口!那就对了,所有这些都是图形界面应用。IE浏览器本身,也是个带界面,能够用鼠标键盘操作的图形应用。至于游戏,那就是专门主攻图形学的带界面应用。绝对上讲,没有界面的应用是不存在的。界面是电脑和人脑沟通的窗口。类似于DOS,Linux那样的命令行的,叫文字界面。其它所有带有窗口,一般支持鼠标,键盘,手柄等的,都属于图形界面。至于Java的开发,所用到的开发工具,例如JBuilder,Eclipse,MyEclipse,Netbeans,无一不是图形界面的应用。但是长期以来,由于种种原因(我想其中最重要的原因大概是速度,内存占用和系统集成度),图形界面一直没能成为Java开发的主流,尤其在国内,做JSP成了Java开发的代名词,但是国外的情况好很多,出现了很多基于Swing的优秀软件。我想国内的电脑普遍配置过低也是个很重要的因素。但是,这并不影响Java图形界面的应用广度,很多项目,尤其是比较综合的项目,都还是用到了图形界面的开发,例如Applet技术,客户端软件,以及最近非常流行的Eclipse 下的SWT/JFace/RCP(Rich Client Platform,富用户客户端平台)软件开发,它们都是图形界面的软件。而且,在公司,很多老项目,可能是用Applet搭建,或者是完全用Swing实现的,这时候,您都不得不维护它,因为客户用习惯了一样东西后,是很难再做改变的,例如笔者此前就职的那家外企,就有大量的Swing应用。至于做算法的,一般也都会和一些界面结合起来,制作一些Demo应用。如果是图形相关的,那更是100%要做界面了,虽然Java中的图形算法由于虚拟机本身的原因执行效率低一些。

Java中的图形界面系统和JVM一样,也是分为四个层次(大致的划分,并未参考权威的资料):操作系统图形设备层 > 虚拟机本地代码层 > Java封装层 > 用户应用层。由于画图依赖操作系统的功能,所以,在一些服务器上,例如没有安装XWindows系统的Linux服务器,不能执行图形界面应用。又由于Java的图形界面采用了最大公约数的做法,所以和底层的语言例如C++相比,其功能总是感觉少,例如托盘功能(桌面最右下角的那部分区域),也是最近才加入的(JDK1.6支持)。虚拟机本地代码层体现在大量的DLL文件上,例如jre/bin/awt.dll,就是Java的AWT类的C代码的封装,所有的键盘和鼠标操作,都通过它来进行(换句话说纯Java是做不到的)。使用微软的VC++中提供的一款工具 Dependency Walker,可以看到其中的DLL中封装的函数列表,如图18.1所示。所以一般对Java访问系统级功能的操作,例如访问注册表,都需要额外使用C++代码来实现,一般也不跨平台,这也是Java的图形界面开发一直没能流行开来的一个原因,甚至于现在出现了Eclipse力挺的SWT,这样的局面还是依然不能结束。

2

刘长炯著

图18.1 awt.dll中的本地方法列表

18.1.2 Java的GUI类库发展简介

GUI,Graphics User Interface,就是图形用户界面的意思。Applet(中文常译作小应用程序),是1995年导致Java大火一把的主要原因。当年Sun推出了HotJava浏览器(当然,此款浏览器早已停止开发,代之以浏览器+Java插件),成为世界上首个支持跨平台的交互式应用的浏览器,虽然其后由于种种原因未能推广开来,但是它证明了Java的主要优点:跨平台,安全性等等,为以后在服务器端和手机应用大展旗鼓打下了基础。Applet不能访问本地文件系统,也不能任意访问网络,这是个优点,也是个缺点,后文我们会讨论如何

Appelt的早期版本是AWT的一个子集。 AWT(Abstract Windowing Toolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件(components)。由于AWT采用本地组件+最小公倍数的做法,导致里面的组件种类奇缺,例如常见的树状结构和表格,都不支持,所以开发人员对它的怨声很大。我的Java学习之路,就是从一本讲解Applet的薄薄的书籍开始的。 后来Sun公司推出了Swing(中文意思为摇摆,不过没有正式的中文名称,一般保持英文称呼)图形包,它只利用了AWT的绘图功能,相当于白手起家,拿着一只画笔来模拟所有的组件。例如早期的按钮,是长方形加阴影加字符串,那就构造一个绘图类,依次从底到上把所有的内容绘制出来。这样,Swing可以任意设计图形界面,或者绘制成任意风格,很容易实现换肤等功能,但是缺陷就是运行速度和观感上,总是和真实的组件有些差异。所谓假的真不了嘛。不过,因为Swing采用了MVC架构设计,系统灵活性极强,被成为设计模式的典型,甚至许多现在出现的AJAX框架,例如Ext,也采用了类似的MVC结构,可见其设计思想之先进。 在推出Swing后,Applet中也可以使用Swing组件来构建高级的界面了,这导致当时

同期,J2ME出现了不少Applet+Servlet开发的Web应用,尤其是一些老的项目,更是如此。

(Java 2 Micro Edition,微设备版)也推出了,获得了很大的成功。大家都知道移动有个百宝箱业务,那就是Java开发的,一般为游戏居多。 不过,虽然Swing一直在改进,但是还是有人怀念操作系统原生的界面和组件,这种情况下,IBM资助的Eclipse项目开始使用SWT(The Standard Widget Toolkit,标准部件工具包),才用和AWT相反的做法,即使用最大公倍数的做法来使用本地类库(C++开发的DLL)来封装操作系统的组件,如果不存在,则采用模拟的方式,这样SWT随着Eclipse的推广获得了流行。当然,MyEclipse也是基于SWT构建的。随着SWT的发展,后来进一步推出了JFace,对SWT进行了高层的封装,更发展到随着Eclipse插件开发的流行,出现了RCP应用,它的特点就是组件和AWT一样,完全和操作系统的一致,但是设计上

3

刘长炯著

稍嫌死板,基本上是类似于链表的方式,不如AWT/Swing的API来的灵活,也很难换肤(除非在操作系统层次上实现功能,封装为Java调用,目前已经有人实现,参考资料部分)。因为SWT是依赖于DLL+Java代码方式的图形库,因此不同的操作系统下要使用对应版本的SWT类库。甚至于SWT还推出了手机运行的版本,大有和Swing分庭抗礼的气势。

18.1.3 标准图形界面的组成

作为开发者,大家需要了解常见的桌面应用的界面结构,并按照这种常规的做法进行界面开发,因为只有这样,使用者才能很快的上手,而且,绝大部分的界面组件,在不同的编程语言中作用都是相同的。这样您可以学习别人的或者别的语言的界面设计,很快的应用到自己的项目中。图18.2列出了一款非常好用的Java开发工具:Gel的界面。

图 18.2 桌面应用界面结构

典型的界面包括顶部的菜单栏(Menu),顶部稍下的工具栏(Toolbar),界面主体和状态栏(Statusbar)。菜单栏包括菜单条(MenuBar),其实菜单条是个不可见的容器,包括了下面的菜单(Menu)以及菜单项(MenuItem),另外菜单和菜单项又可以包含子菜单(SubMenu),要说可见,也就是左侧的竖着排的几个小点,表明这个菜单是可以浮动或者拖

,动的(Floatable);如果不可浮动的时候,这几个点就消失了。菜单上显示的文字文件(F)其中的括号里面的字符F叫做助记符(Mnemonic),它的作用是帮助行动不变的人使用键盘来访问菜单(当然也可以使正常人使用键盘快速访问菜单),当用户按下键盘上的Alt键后,再点击带有下划线的字母,就可以打开对应的菜单。因此,助记符只能是英文字母或者数字。另外,对于文件菜单下的子项目打开,

,它的左侧显示的叫图标

(Icon),右侧显示的叫标签(Label,也有称为Text,即文本的),最右侧显示的叫快捷键

4

刘长炯著

(Accelerator,也叫加速键),也就是说同时按下Ctrl键和O键(其实是按顺序先按下Ctrl键不放,然后再按下键盘上的O键,接着依次松开两个键),就相当于直接执行这个菜单所对应的功能。工具栏上的按钮,一般是鼠标移过时,会发生边框的改变。鼠标停留在按钮上

,显示的字呢,则被显示的淡黄色背景的提示文字,例如打开,叫做工具栏提示(Tooltip)

称为工具栏提示文本(TooltipText),这些文字在固定时间,一般为几秒之后消失。工程管,上面有最大化,停靠,还原等按钮。停靠后的理器处显示的叫内部窗体(InternalFrame)

点击后内部窗体只在侧栏显示一个小小的图标和窗口以及提示文字,例如图中的输出窗口,

暂时弹出,点击别处后又会自动最小化隐藏。工程管理器里面显示的是树(Tree),每个树的节点(Node)都可以带有图标和文字,也有人称之为TreeItem的。工程管理器右侧则显示了一个标签页面板(TabbedPane),每个项目被成为标签(Tab)或者标签项(TabItem)。标签里面显示的代码则是一个富文本区(RichTextarea),能够显示不同的颜色。其它的输入元素还包括单行文本框(TextField)和多行文本区(TextArea)。最底部的状态栏,一般可以使用单个标签(Label,只用来显示不可被选中的文本)来显示;复杂点的状态栏则使用多个组件组合显示。 图形界面开发中有个重要的概念就是容器(Container)和组件(Component),类似于玻璃板和上面镶嵌的雕饰。容器一般都是透明的,有了它,例如将状态栏使用容器来实现,那么就可以在其中成组的加入足够多的组件,成为一个整体,便于进行移动,显示,隐藏,设置大小等操作。容器也可以设置为不透明的,这样就可以带有背景色,从而能够看到它。容器的外观一般会影响加入的子组件的外观,默认情况下容器中的组件都会缺省的和容器的色彩设置保持一致。 还有很多的概念,读者可以自行阅读相关教程,本书就不再赘述这些内容了。

18.1.4 常见的可视化界面开发软件

在实际应用中,界面的开发可以使用手工编写代码和可视化界面设计器进行开发两种模式。虽然最优秀的组件都是手工编写代码作出的,然而这对于开发人员要求很高,要求开发人员必须精通Java的GUI开发。一般来说,采用可视化界面设计器+代码调整的方式进行开发,可以大大提高开发效率。Eclipse官方推出的开源免费界面设计器叫做Visual Editor,可以可视化的设计Swing和SWT界面,然而遗憾的是无法用于Eclipse 3.3下,而且运行时速度极慢,代码稍微复杂,就需要很长时间进行解析。因此,Eclipse下的界面设计器以商业收费插件居多,例如WindowBuilder,支持SWT,Swing,AWT,RCP等界面开发,有免费版本,但是功能很有限。还有一个比较小巧就是笔者本章即将介绍的Jigloo,它对个人使用免费,支持可视化图形界面的开发,还支持Swing和SWT界面互相转换功能。以前的收费开发工具JBuilder也对拖拉设计的Swing、AWT界面开发提供了支持。而目前来说,对Swing/AWT界面开发支持的最好的,当属Netbeans 提供的免费界面设计器,代号Matisse(注:这是一位法国著名画家的名字),是现存数一数二的界面设计器,它最大的本领就是无须开发者了解布局管理器之类的概念,只要按照自己的设想拖放搭建界面,运行后不论主窗口如何放大,都不会变形,可惜的是不支持SWT的开发。虽然此工具很好,然而却必须安装Netbeans才能使用,而MyEclipse从中看出了商机,它把Netbeans的界面设计器功能单独独立出来,集成到Eclipse中使用(这个插件叫做Matisse4MyEclipse,即使没有安装MyEclipse也可以单独使用,当然是收费插件),从而让Eclipse的用户也能使用一流的Swing界面设计器了。 综上所述,MyEclipse本身只支持Swing的界面设计器,本书将会选用Jigloo插件来配套实现SWT的界面设计器功能进行讲解。所以本章内容涵盖:MyEclipse的AWT/Swing

5

刘长炯著

MyEclipse 6 第十八章 图形界面开发--AWT,Swing,SWT

第十八章图形界面开发--AWT,Swing,SWT第十八章图形界面开发--AWT,Swing,SWT.............................................................118.1图形界面简介.................................................
推荐度:
点击下载文档文档为doc格式
5ac5d0bvw21wxgu8jpsa
领取福利

微信扫码领取福利

微信扫码分享