【VC++开源代码栏目提醒】:网学会员--在 VC++开源代码编辑为广大网友搜集整理了:MyEclipse 6 第十八章 图形界面开发--AWT,Swing,SWT - 其它资料绩等信息,祝愿广大网友取得需要的信息,参考学习。
MyEclipse 6 Java 开发中文教程第十八章 图形界面开发--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 小结 ................................................................................................................. 8418.1 图形界面简介 本节简要讨论图形界面,由于定位是开发为主,所以理论之处的讲解并不多,希望读者理解,并自行寻找更多资料补充自学。
另外提示,对图形界面无兴趣,或者工作根本用不到1 刘长炯著 MyEclipse 6 Java 开发中文教程的读者,完全可以忽略本章的内容。
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(RichClient Platform,富用户客户端平台)软件开发,它们都是图形界面的软件。
而且,在公司,很多老项目,可能是用 Applet 搭建,或者是完全用 Swing 实现的,这时候,您都不得不维护它,因为客户用习惯了一样东西后,是很难再做改变的,例如笔者此前就职的那家外企,就有大量的 Swing 应用。
至于做算法的,一般也都会和一些界面结合起来,制作一些 Demo应用。
如果是图形相关的,那更是 100%要做界面了,虽然 Java 中的图形算法由于虚拟机本身的原因执行效率低一些。
Java 中的图形界面系统和 JVM 一样,也是分为四个层次(大致的划分,并未参考权威的资料) :操作系统图形设备层 gt 虚拟机本地
代码层 gt Java 封装层 gt 用户应用层。
由于画图依赖操作系统的功能,所以,在一些服务器上,例如没有安装 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 刘长炯著 MyEclipse 6 Java 开发中文教程 图 18.1 awt.dll 中的本地方法列表18.1.2 Java 的 GUI 类库发展简介 GUI,Graphics User Interface,就是图形用户界面的意思。
Applet(中文常译作小应 ,用程序) 是 1995 年导致 Java 大火一把的主要原因。
当年 Sun 推出了 HotJava 浏览器 (当然,此款浏览器早已停止开发,代之以浏览器+Java 插件) ,成为世界上首个支持跨平台的交互式应用的浏览器,虽然其后由于种种原因未能推广开来,但是它证明了 Java 的主要优点:跨平台,安全性等等,为以后在服务器端和手机应用大展旗鼓打下了基础。
Applet 不能访问本地文件系统,也不能任意访问网络,这是个优点,也是个缺点,后文我们会讨论如何 Appelt 的早期版本是 AWT 的一个子集。
AWTAbstract 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 组件来构建高级的界面了,这导致当时出现了不少 Applet+Servlet 开发的 Web 应用,尤其是一些老的项目,更是如此。
同期,J2ME(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 刘长炯著 MyEclipse 6 Java 开发中文教程稍嫌死板,基本上是类似于链表的方式,不如 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 刘长炯著 MyEclipse 6 Java 开发中文教程(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/Swing5 刘长炯著 MyEclipse 6 Java 开发中文教程开发功能和 JIgloo 的 AWT/Swing/SWT 开发能力。
而 Eclipse 号称
开源免费这么久了,真是没想到竟没有一个好使的免费界面设计器(Jigloo 不能用于商业),只能说是利益使然了。
18.2 Applet 开发 本节讨论 Applet 的基本开发,即以手工编码的方式进行开发,在 18.2 之后的章节介绍可视化开发。
18.2.1 Applet 的 HelloWorld 开发 首先让我们新建一个 Java 项目:AppletTest,接着选择新建类文件 applets. MyApplet,其
代码清单如下:MyApplet.javapackage appletsimport java.awt.Colorimport java.awt.Graphicsimport java.awt.Imagepublic class MyApplet extends java.applet.Applet public void paintGraphics g g.setColorColor.green g.fill3DRect0 0 getWidth - 1 getHeight - 1 true g.setColorColor.decodequot0x0000ffquot g.drawStringquotHello Applet!quot 20 20 g.setColornew Color200 20 155 g.drawStringquot你好,自定义颜色!quot 20 40 Image img getImagethis.getClass.getResourcequotusb.jpgquot g.drawImageimg 20 60 this 。
这段
代码定义了一个 Applet,并覆盖了 Applet 的绘图方法 paintGraphics g,这个方法是由 Applet 的解释器调用的,传递的参数是一个图形对象。
图形对象就是 Java 中作图的原始对象,可以画点,线,多边形,椭圆,文字,还可以画已经存在的图片。
这段
代码所执行的操作就是:设置画笔颜色为绿色,在坐标为(0,0)的点开始,以 Applet 自身显示的高度减 1 为 3D 的矩形高,Applet 自身宽度减 1 为 3D 的矩形宽,填充绘制一个突起的 3D 矩形(g.fill3DRect方法的最后一个参数即使突起或者凹陷,取值为 boolean) ;随后从颜色字符串 0x0000ff 解析出 Java 中的颜色对象――蓝色,并在坐标为(20,20)的点开始绘6 刘长炯著 MyEclipse 6 Java 开发中文教程制一个字符串 Hello Applet!;接下来则使用 RGB 格式(物理上讲的,颜色的三原色,红绿蓝,每个的取值为 0 到 255)定义了画笔的颜色为红 200,20,155,并在坐标为(20,40)的点开始绘制一个字符串你好, 自定义颜色! 随后使用 Applet 自带的 getImageURL方法, ;从相对路径读取了一张文件名.