MyEclipse6Java开发中文教程 第十八章图形界面开发一-AWT, Swing SWT 第十八章图形界面开发一-AWT,Swng,SWT 181图形界面简介 18.1.1概述 1812Java的GU类库发展简介 1813标准图形界面的组成 1814常见的可视化界面开发软件 182 Applet开发 1821 Apple的 Helloworld开发 1822 Applet的运行方式 182.3 Applet的生命周期 1824 Applet安全限制和签名 Applet 1825 Applet参数传递和 JavaScript互操作. 18.26从JDK的自带例子中学习 Applet和图形界面编程 183使用 Matisse4 MyEclipse开发 AWT/Swing应用 1831安装开发插件 1832可视化开发 Applet 1833调整生成代码和换肤. 34开发UDP局域网聊天桌面应用 1835发布应用、启动文件制作 184使用Jgo0插件开发 SWT/Swing应用 1841 Igloo插件的下载安装 1842搭建S开发环境 1843使用 Igloo开发SWT应用 9966 1844Jg00开发SW的常见问题 Jgoo开发 Swing应用 185参考资料 73 18.51网址 1852Java应用播放声音的代码示例 74 1853 JavaScript包的英文参考文档 1654 Eclipse中插件的安装 186小结 84 181图形界面简介 本节简要讨论图形界面,由于定位是开发为主,所以理论之处的讲解并不多,希望读者 理解,并自行寻找更多资料补充自学。另外提示,对图形界面无兴趣,或者工作根本用不到 刘长炯著
MyEclipse 6 Java 开发中文教程 1 刘长炯著 第十八章 图形界面开发--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 图形界面简介 本节简要讨论图形界面,由于定位是开发为主,所以理论之处的讲解并不多,希望读者 理解,并自行寻找更多资料补充自学。另外提示,对图形界面无兴趣,或者工作根本用不到
MyEclipse6Java开发中文教程 的读者,完全可以忽略本章的内容。 1811概述 在本书刚开始计划写的时候,选的书名是《 MyEclipse6 Java ee开发中文手册》,后 来才改成了现在的这个名字:《 MyEclipse6Java开发中文教程》。这是因为Java的覆盖面 要比 Java ee大些,Java的开发也不是除了做做网页(一般加以专业称呼为 Java e开发) 而且考虑到实际情况,在一般公司中经常出现维护老项目的现象,如果是在校学子做毕业设 计,也会用到一些目前来说不是太“主流”的技术,在Java中,经常就是指图形界面开发。 那么图形界面开发到底在实际中有没有用?回答是肯定的:有!大家想想,打开 Windows 后看到的是什么?窗口!那就对了,所有这些都是图形界面应用。旧浏览器本身,也是个 带界面,能够用鼠标键盘操作的图形应用。至于游戏,那就是专门主攻图形学的带界面应用, 绝对上讲,没有界面的应用是不存在的。界面是电脑和人脑沟通的窗口。类似手DOS,Lnux 那样的命令行的,叫文字界面。其它所有带有窗口,一般支持鼠标,键盘,手柄等的,都属 于图形界面。至于Java的开发,所用到的开发工具,例如 JBuilder, Eclipse, MyEclipse, Netbeans,无一不是图形界面的应用。但是长期以来,由于种种原因(我想其中最重要的 原因大概是速度,内存占用和系统集成度),图形界面一直没能成为Java开发的主流,尤 其在国内,做JSP成了Java开发的代名词,但是国外的情况好很多,出现了很多基于Swng 的优秀软件。我想国内的电脑普遍配置过低也是个很重要的因素。但是,这并不影响Java 图形界面的应用广度,很多项目,尤其是比较综合的项目,都还是用到了图形界面的开发 例如 Applet技术,客户端软件,以及最近非常流衔的 Eclipse下的 SWT/JFace/RCP(Rch Client platform,富用户客户端平台)软件开发,它们都是图形界面的软件。而且,在公司 很多老项目,可能是用 Applet搭建,或者是完全用Swng实现的,这时候,您都不得不维 护它,因为客户用习惯了一样东西后,是很难再做改变的,例如笔者此前就职的那家外企 就有大量的Swng应用。至于做算法的,一般也都会和一些界面结合起来,制作一些Demo 应用。如果是图形相关的,那更是100%要做界面了,虽然Java中的图形算法由于虚拟机 本身的原因执行效率低一些。 Java中的图形界面系统和JVM一样,也是分为四个层次(大致的划分,并未参考权威 的资料):操作系统图形设备层>虚拟机本地代码层>Java封装层>用户应用层。由于 画图依赖操作系统的功能,所以,在一些服务器上,例如没有安装ⅪⅥ indows系统的 Linux 服务器,不能执行图形界面应用。又由于Java的图形界面采用了最大公约数的做法,所以 和底层的语言例如C+十相比,其功能总是感觉少,例如托盘功能(桌面最右下角的那部分 区域),也是最近才加入的(JDK16支持)。虚拟机本地代码层体现在大量的DLL文件上,例 如 jre/bin/awt. dI,就是Java的AWT类的C代码的封装,所有的键盘和鼠标操作,都通过 它来进行(换句话说纯Java是做不到的)。使用微软的VC++中提供的一款工具 Dependency Walker,可以看到其中的DLL中封装的函数列表,如图18.1所示。所以一般 对Java访问系统级功能的操作,例如访问注册表,都需要额外使用C++代码来实现,一般 也不跨平台,这也是Java的图形界面开发一直没能流行开来的一个原因,甚至于现在出现 了 Eclipse力挺的SWT,这样的局面还是依然不能结束。 2 刘长炯著
MyEclipse 6 Java 开发中文教程 2 刘长炯著 的读者,完全可以忽略本章的内容。 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,这样的局面还是依然不能结束
MyEclipse6Java开发中文教程 Ordinal 209(0x00D1) 208 (0x00D0) Mava_sun_awt._DefaultMouseInfoPeer_iswindowUnd 210x00D2 209x001 ava sun awt EmbeddedFrame_setPeer@12 211 (0x0OD3) 210 (Ox00D2) Java sun awt FontDescriptor initIDse8 12 (0x00D4) 211 (0x00D3) Java sun_ awt_Keyboar dFocusManagerPeerImpl-cle 回2130x005) 4)_Java_sun_awt_KeyboardFocusManagerPeerImpl e 214 (0x00D6) 213 (0x00D5) _Java_sun_ awt_KeyboardFocusManagerPeerImpl_get e 215 (0*00D7) 214 (0x00D6) Java sun_ awt PlatformFont_initIDsQ8 图181aMd中的本地方法列表 1812Java的GU|类库发展简介 Gu, Graphics User Interface,就是图形用户界面的意思。 Applet(中文常译作小应 用程序),是1995年导致Java大火一把的主要原因。当年Sun推出了 HotJava浏览器(当 然,此款浏览器早已停止开发,代之以浏览器+Java插件),成为世界上首个支持跨平台的 交互式应用的浏览器,虽然其后由于种种原因未能推广开来,但是它证明了Java的主要优 点:跨平台,安全性等等,为以后在服务器端和手机应用大展旗鼓打下了基础。 Applet不 能访问本地文件系统,也不能任意访问网络,这是个优点也是个缺点,后文我们会讨论如 何 Appelt的早期版本是AWT的一个子集。AMT( Abstract Windowing Toolkit),中文译为 抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。AWT 由Java中的 Java. aw包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GU) 导致里面的组件种类奇缺,例如常见的树状结构和表格,都不支持,所以开发人员对它的怨 声很大。我的Java学习之路,就是从一本讲解 Applet的薄薄的书籍开始的。 后来Sun公司推出了Swng(中文意思为摇摆,不过没有正式的中文名称,一般保持 英文称呼)图形包,它只利用了AWT的绘图功能,相当于白手起家,拿着一只画笔来模拟 所有的组件。例如早期的按钮,是长方形加阴影加字符串,那就构造一个绘图类,依次从底 到上把所有的内容绘制出来。这样,Swng可以任意设计图形界面,或者绘制成任意风格, 很容易实现换肤等玏能,但是缺陷就是运行速度和观感上,总是和真实的组件有些差异。所 谓假的真不了嘛。不过,因为 Swing采用了MVC架构设计,系统灵活性极强,被成为设计 模式的典型,甚至许多现在出现的AJAX框架,例如Ex,也采用了类似的MVC结构,可 见其设计思想之先进。 在推出 Swing后, Applet中也可以使用 Swing组件来构建高级的界面了,这导致当时 出现了不少 Applet+ Servlet开发的Web应用,尤其是一些老的项目,更是如此。同期,J2ME (Java2 Micro edition,微设备版)也推出了,获得了很大的成功。大家都知道移动有个百 宝箱业务,那就是Java开发的,一般为游戏居多。 不过,虽然Swng一直在改进,但是还是有人怀念操作系统原生的界面和组件,这种 情况下,旧BM资助的 Eclipse项目开始使用SWT( The Standard Widgetτ oolkit,标准部件 工具包),才用和AWT相反的做法,即使用最大公倍数的做法来使用本地类库(C++开发 的DL)来封装操作系统的组件,如果不存在,则采用模拟的方式,这样SWT随着 Eclipse 的推广获得了流行。当然, MyEclipse也是基于SWT构建的。随着SWT的发展,后来进 步推出了 JFace,对SWT进行了高层的封装,更发展到随着 Eclipse插件开发的流行, 出现了RCP应用,它的特点就是组件和AWT一样,完全和操作系统的一致,但是设计上 刘长炯著
MyEclipse 6 Java 开发中文教程 3 刘长炯著 图 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 组件来构建高级的界面了,这导致当时 出现了不少 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 一样,完全和操作系统的一致,但是设计上
MyEclipse6Java开发中文教程 稍嫌死板,基本上是类似于链表的方式,不如 AWT/Swing的APl来的灵活,也很难换肤(除 非在操作系统层次上实现功能,封装为Java调用,目前已经有人实现,参考资料部分)。 因为SWT是依赖于DLL+Java代码方式的图形库,因此不同的操作系统下要使用对应版 本的SWT类库。甚至于SWT还推出了手机运行的版本,大有和Swng分庭抗礼的气势。 1813标准图形界面的组成 作为开发者,大家需要了解常见的桌面应用的界面结构,并按照这种常规的做法进行界 面开发,因为只有这样,使用者才能很快的上手,而且,绝大部分的界面组件,在不同的编 程语言中作用都是相同的。这样您可以学习别人的或者别的语言的界面设计,很快的应用到 自己的项目中。图18.2列出了一款非常好用的Java开发工具:Ge的界面 文件G编得搜索视图工程巴创建工具①帮助出回画后⊙%%需 回色日,②,,PB2c 工程管理器 日CO时!senn No)CodeM x244 public string geturl()i 245 return url +. IE_Extension 246 日色sre +a benson 247 日 codeman Operam PrI the url to set 250 工程管理器 public void setUrl(String url)[ C类结构浏览器 O SaveWebDialog(Shell parent, nt s 256 ◆ getEncodingo: Strin public String getEncoding( ◆ getTtleO: String ◆ getUrl∩ Strin y‖源文件预史 输出窗 281 lines 图182桌面应用界面结构 典型的界面包括顶部的菜单栏(Menu),顶部稍下的工具栏( Toolbar),界面主体和状态 栏( Statusbar)。菜单栏包括菜单条( Menu Bar),其实菜单条是个不可见的容器,包括了 下面的菜单(Menu)以及菜单项( Menuitem),另外菜单和菜单项又可以包含子菜单 ( Submenu),要说可见,也就是左侧的竖着排的几个小点,表明这个菜单是可以浮动或者拖 动的( loadable):如果不可浮动的时候,这几个点就消失了。菜单上显示的文字文件(E 其中的括号里面的字符F叫做助记符( Mnemonic),它的作用是帮助行动不变的人使用键 盘来访问菜单(当然也可以使正常人使用键盘快速访问菜单),当用户按下键盘上的AIt键 后,再点击带有下划线的字母,就可以打开对应的菜单。因此,助记符只能是英文字母或者 数字。另外,对于文件菜单下的子项目打开, 打开Q)Cm+0,它的左侧显示的叫图标 (lcon),右侧显示的叫标签( Label,也有称为Text,即文本的),最右侧显示的叫快捷键 刘长炯著
MyEclipse 6 Java 开发中文教程 4 刘长炯著 稍嫌死板,基本上是类似于链表的方式,不如 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,即文本的),最右侧显示的叫快捷键
MyEclipse6Java开发中文教程 ( Accelerator,也叫加速键),也就是说同时按下ct键和O键(其实是按顺序先按下Ctrl 键不放,然后再按下键盘上的O键,接着依次松开两个键),就相当于直接执行这个菜单所 对应的功能。工具栏上的按钮,一般是鼠标移过时,会发生边框的改变。鼠标停留在按钮上 显示的淡黄色背景的提示文字,例如打开,叫做工具栏提示( Tooltip),显示的字呢,则被 称为工具栏提示文本( Tooltip Text),这些文字在固定时间,一般为几秒之后消失。工程管 理器处显示的叫内部窗体( InternalFrame),上面有最大化,停靠,还原等按钮。停靠后的 内部窗体只在侧栏显示一个小小的图标和窗口以及提示文字,例如图中的输出窗口,点击后 暂时弹出,点击别处后又会自动最小化隐藏。工程管理器里面显示的是树(Tree),每个树的 节点(Node)都可以带有图标和文字,也有人称之为 Treeltem的。工程管理器右侧则显示 了一个标签页面板( Tabbed Pane),每个项目被成为标签(Tab)或者标签项( Tabltem)。标 签里面显示的代码则是一个富文本区( Rich Textarea),能够显示不同的颜色。其它的输入 元素还包括单行文本框( TextField)和多行文本区( TextArea)。最底部的状态栏,共般可以 使用单个标签( Label,只用来显示不可被选中的文本)来显示;复杂点的状态栏则使用多 个组件组合显示。 图形界面开发中有个重要的概念就是容器( Container)和组件( Component),类似于 玻璃板和上面镶嵌的雕饰。容器一般都是透明的,有了它,例如将状态栏使用容器来实现, 那么就可以在其中成组的加入足够多的组件,成为一个整体,便手进行移动,显示,隐藏 设置大小等操作。容器也可以设置为不透明的,这样就可以带有背景色,从而能够看到它 容器的外观一般会影响加入的子组件的外观,默认情况下容器中的组件都会缺省的和容器的 色彩设置保持一致。 还有很多的概念,读者可以自行阅读相关教程,本书就不再赘述这些内容了。 1814常见的可视化界面开发软件 在实际应用中,界面的开发可以使用手工编写代码和可视化界面设计器进行开发两种模 式。虽然最优秀的组件都是手工编写代码作出的,然而这对于开发人员要求很高,要求开发 人员必须精通Java的GU开发。一般来说,采用可视化界面设计器+代码调整的方式进行 开发,可以大大提高开发效率。Ec|pse官方推出的开源免费界面设计器叫做 Visual editor, 可以可视化的设计Swng和SWT界面,然而遗憾的是无法用于 Eclipse33下,而且运行 时速度极慢,代码稍微复杂,就需要很长时间进行解析。因此, Eclipse下的界面设计器以 商业收费插件居多,例如 Window builder,支持SWT,Swng,AMT,RCP等界面开发, 有免费版本,但是功能很有限。还有一个比较小巧就是笔者本章即将介绍的Jigo,它对个 人使用免费,支持可视化图形界面的开发,还支持Swng和SWT界面互相转换功能。以前 的收费开发工具 JBuilder也对拖拉设计的Swng、AMT界面开发提供了支持。而目前来说 对 Swing/AWT界面开发支持的最好的,当属 Netbeans提供的免费界面设计器,代号 Matisse(注:这是一位法国著名画家的名字),是现存数一数二的界面设计器,它最大的本 领就是无须开发者了解布局管理器之类的概念,只要按照自己的设想拖放搭建界面,运行后 不论主窗口如何放大,都不会变形,可惜的是不支持SWT的开发。虽然此工具很好,然而 却必须安装 Netbeans才能使用,而 MyEclipse从中看出了商机,它把 Netbeans的界面设 计器功能单独独立出来,集成到 Eclipse中使用(这个插件叫做 Matisse4 MyEclipse,即使 没有安装 MyEclipse也可以单独使用,当然是收费插件),从而让 Eclipse的用户也能使用 流的 Swing界面设计器了。 综上所述, MyEclipse本身只支持 Swing的界面设计器,本书将会选用 Igloo插件来 配套实现SWT的界面设计器功能进行讲解。所以本章内容涵盖: MyEclipse的 AWT/Swing 刘长炯著
MyEclipse 6 Java 开发中文教程 5 刘长炯著 (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
MyEclipse6Java开发中文教程 开发功能和Jgoo的 AWT/Swing/SWT开发能力。而 Eclipse号称开源免费这么久了,真 是没想到竞没有一个好使的免费界面设计器( Igloo不能用于商业),只能说是利益使然了。 182 Applet开发 本节讨论 Applet的基本开发,即以手工编码的方式进行开发,在182之后的章节介绍 可视化开发 1821 Applet的 Helloworld开发 首先让我们新建一个Java项目: Applet7est,接着选择新建类文件 applets: MyApplet, 其代码清单如下 My Applet java package applets import java. awt. Colori import java. awt. Graphics import java. awt. Image public class MyApplet extends java applet Applet public void paint(Graphics gte g. setcolor(Color green) g. fill3DRect(0, 0, getwidth()-l, getHeight()-1, true g setColor(Color decode("0x0000ff))i g drawString Hello Applet! ", 20) g setcolor(new Color (200, 20, 155))i g. drawstring("你好,自定义颜色!",20,40); /Image img= getImage(this getclass().getResource("usb.Jpg)) g drawImage(img, 20, 60, this) 这段代码定义了一个 Applet,并覆盖了 Applet的绘图方法pant( Graphics g),这个方法 是由 Applet的解释器调用的,传递的参数是一个图形对象。图形对象就是Java中作图的原 始对象,可以画点,线,多边形,椭圆,文字,还可以画已经存在的图片。这段代码所执行 的操作就是:设置画笔颜色为绿色,在坐标为(0,0)的点开始,以 Applet自身显示的高 度减1为3D的矩形高, Applet自身宽度减1为3D的矩形宽,填充绘制一个突起的3D矩 形(gf3 DRect0方法的最后一个参数即使突起或者凹陷,取值为 boolean);随后从颜色 字符串0x0000解析出Java中的颜色对象一-蓝色,并在坐标为(20,20)的点开始绘 刘长炯著
MyEclipse 6 Java 开发中文教程 6 刘长炯著 开发功能和 JIgloo 的 AWT/Swing/SWT 开发能力。而 Eclipse 号称开源免费这么久了,真 是没想到竟没有一个好使的免费界面设计器(Jigloo 不能用于商业),只能说是利益使然了。 18.2 Applet 开发 本节讨论 Applet 的基本开发,即以手工编码的方式进行开发,在 18.2 之后的章节介绍 可视化开发。 18.2.1 Applet 的 HelloWorld 开发 首先让我们新建一个 Java 项目:AppletTest,接着选择新建类文件 applets. MyApplet, 其代码清单如下: MyApplet.java package applets; import java.awt.Color; import java.awt.Graphics; import java.awt.Image; public class MyApplet extends java.applet.Applet { public void paint(Graphics g) { g.setColor(Color.green); g.fill3DRect(0, 0, getWidth() - 1, getHeight() - 1, true); g.setColor(Color.decode("0x0000ff")); g.drawString("Hello Applet!", 20, 20); g.setColor(new Color(200, 20, 155)); g.drawString("你好,自定义颜色!", 20, 40); Image img = getImage(this.getClass().getResource("usb.jpg")); g.drawImage(img, 20, 60, this); } } 。这段代码定义了一个 Applet,并覆盖了 Applet 的绘图方法 paint(Graphics g),这个方法 是由 Applet 的解释器调用的,传递的参数是一个图形对象。图形对象就是 Java 中作图的原 始对象,可以画点,线,多边形,椭圆,文字,还可以画已经存在的图片。这段代码所执行 的操作就是:设置画笔颜色为绿色,在坐标为(0,0)的点开始,以 Applet 自身显示的高 度减 1 为 3D 的矩形高,Applet 自身宽度减 1 为 3D 的矩形宽,填充绘制一个突起的 3D 矩 形(g.fill3DRect()方法的最后一个参数即使突起或者凹陷,取值为 boolean);随后从颜色 字符串 0x0000ff 解析出 Java 中的颜色对象――蓝色,并在坐标为(20,20)的点开始绘
MyEclipse6Java开发中文教程 制一个字符串He| o Applet;接下来则使用RGB格式(物理上讲的,颜色的三原色,红绿 蓝,每个的取值为0到255)定义了画笔的颜色为红200,20,155,并在坐标为(20,40) 的点开始绘制一个字符串你好,自定义颜色!随后使用 Applet自带的 getImage(URL)方法 从相对路径读取了一张文件名为 usb. jpg的图片(只支持格式jpg,gf和png),并在坐标为 (20,60)的点绘制了这个图片,最后一个参数叫做 ImageObserver,图片检测器,即 applet 自身,用来探测当图片加载完的时候才会绘制这张图。 这就是早期 Applet的主要用法,即自己画图做动画,再加上播放声音,当时最大的用 处就是做一些Aplt的小游戏,例如俄罗斯方块等等,甚至还有公司做了很棒的游戏,例 如有一次在EA看到了 Applet版本的在线红警 接下来我们来运行这个例子,选择菜单Run> Run as>1 Java Applet,即可在 Eclipse 中启动并运行此页面,弹出的窗口和运行界面如图182所示。 小程序查看回回区 pple Hello Applet! 你好,目定义颜色! 小程序已启动。 图183运行中的 Applet 1822 Applet的运行方式 那么这个 Applet是怎么样运行的呢?让我们使用专业进程管理器看看运行时的命令 1]: D: WavaMyEclipse6 Ore lbinyavawexe -Djava security policy=java policy. applet classpath E: Workspace lAppletTestbin sunapplet Appletviewer applets. MyApplet1210070089093htm,当前工作目录是E: workspace lAppletTestbinl 很好,去看看,原来运行时候莫名其妙多了两个文件 java policy. applet和 applets. MyApplet11210070089093htm,文件内容分别是 applets. My Applet1210070089093 html java policy. applet /AUTOMATICALLY GENERATED ON Tue Apr 1617: 20: 59 EDT 2002/ 刘长炯著
MyEclipse 6 Java 开发中文教程 7 刘长炯著 制一个字符串 Hello Applet!;接下来则使用 RGB 格式(物理上讲的,颜色的三原色,红绿 蓝,每个的取值为 0 到 255)定义了画笔的颜色为红 200,20,155,并在坐标为(20,40) 的点开始绘制一个字符串你好,自定义颜色!;随后使用 Applet 自带的 getImage(URL)方法, 从相对路径读取了一张文件名为 usb.jpg 的图片(只支持格式 jpg,gif 和 png),并在坐标为 (20,60)的点绘制了这个图片,最后一个参数叫做 ImageObserver,图片检测器,即 applet 自身,用来探测当图片加载完的时候才会绘制这张图。 这就是早期 Applet 的主要用法,即自己画图做动画,再加上播放声音,当时最大的用 处就是做一些 Applet 的小游戏,例如俄罗斯方块等等,甚至还有公司做了很棒的游戏,例 如有一次在 EA 看到了 Applet 版本的在线红警。 接下来我们来运行这个例子,选择菜单 Run > Run As > 1 Java Applet,即可在 Eclipse 中启动并运行此页面,弹出的窗口和运行界面如图 18.2 所示。 图 18.3 运行中的 Applet 18.2.2 Applet 的运行方式 那么这个 Applet 是怎么样运行的呢?让我们使用专业进程管理器看看运行时的命令 行 : D:\Java\MyEclipse6.0\jre\bin\javaw.exe -Djava.security.policy=java.policy.applet -classpath E:\workspace\AppletTest\bin sun.applet.AppletViewer applets.MyApplet1210070089093.html,当前工作目录是 E:\workspace\AppletTest\bin\, 很好,去看看,原来运行时候莫名其妙多了两个文件 java.policy.applet 和 applets.MyApplet1210070089093.html,文件内容分别是: applets.MyApplet1210070089093.html java.policy.applet /* AUTOMATICALLY GENERATED ON Tue Apr 16 17:20:59 EDT 2002*/
MyEclipse6Java开发中文教程 DO NOT EDIT * grant permission java security AllPermission 第二个文件是关系到Java的安全设置,有兴趣的读者可以查找Java的 Policy(策略文件) 相关的内容。第一个文件比较重要,因为 Applet是在浏览器里运行的,前提是用HTML的 APPLET标签将它嵌入页面中,就像在页面中嵌入Fash动画或者图片那样,必选的参数包 括:code,它指定了 Applet的类名,注意写法为包名类名cass:另外两个参数wd和 height制定了 Applet的面板在浏览器中占用的面积,即高度乘以宽度。那么, Applet的标 准运行方式,就是嵌入到网页中使用,使用浏览器打开。此浏览器需要安装Java插件 ( Plug-in),才能正确的加载其中的类文件并执行。此时必须安装了JRE(可以从 htt!ava.com/zhCn)下载或者检查是否安装好了JRE,另外安装完整版的JDK的时候 般也有选择是否安装JRE选项。 OK,让我们总结一下普通用户运行 Applet的必要前提 1.安装了JRE 2.安装了支持Java插件的浏览器(包括, Firefox, Mozilla,, Opera等儿乎所有主流浏 览器) 3.正确开发和发布了 Applet(一般来说网页文件和类文件位于同一个目录下) 现在让我们试一试,在Src目录下新建 My Applet. html,代码清单如下 MyApplet Test 对不起,您的浏览器不支持 Applet! w/ </html 然后打开项目所在的目录的类文件输出目录(例如bi或者 asses),双击 MyApplet. htm 在浏览器中打开,应该能够看到如下的界面 刘长炯著
MyEclipse 6 Java 开发中文教程 8 刘长炯著 /* DO NOT EDIT */ grant { permission java.security.AllPermission; }; 第二个文件是关系到 Java 的安全设置,有兴趣的读者可以查找 Java 的 Policy(策略文件) 相关的内容。第一个文件比较重要,因为 Applet 是在浏览器里运行的,前提是用 HTML 的 APPLET 标签将它嵌入页面中,就像在页面中嵌入 Flash 动画或者图片那样,必选的参数包 括:code,它指定了 Applet 的类名,注意写法为包名.类名.class;另外两个参数 width 和 height 制定了 Applet 的面板在浏览器中占用的面积,即高度乘以宽度。那么,Applet 的标 准运行方式,就是嵌入到网页中使用,使用浏览器打开。此浏览器需要安装 Java 插件 (Plug-in),才能正确的加载其中的类文件并执行。此时必须安装了 JRE(可以从 http://java.com/zh_CN/)下载或者检查是否安装好了 JRE,另外安装完整版的 JDK 的时候, 一般也有选择是否安装 JRE 选项。 OK,让我们总结一下普通用户运行 Applet 的必要前提: 1. 安装了 JRE; 2. 安装了支持 Java 插件的浏览器(包括 IE,Firefox,Mozilla,Opera 等几乎所有主流浏 览器); 3. 正确开发和发布了 Applet(一般来说网页文件和类文件位于同一个目录下)。 现在让我们试一试,在 src 目录下新建 MyApplet.html,代码清单如下: MyApplet Test 对不起,您的浏览器不支持Applet! 。然后打开项目所在的目录的类文件输出目录(例如/bin 或者/classes),双击 MyApplet.html 在浏览器中打开,应该能够看到如下的界面:
MyEclipse6Java开发中文教程 elyApplet Test- indows Internet Explorer E]E: \workspace\AppletTest\binMyApplethtml ☆收藏夹 GMyApplet Test 图Jaa控制台 Hello Applet! Java Plugin 1.6.0-10-beta 使用JR版本1.8.0_10- beta Java Hotspot (TM) Client v 你好,自定义颜色 用户主目录=F:{ Documents and Settings{ BeanSoft.BEAS 清除控制台窗口 f:终结在结束队列上的对象 垃城收集 显示此帮助消息 转储类载入程序列表 打印内存使用 触虫发日志记录 q:隐藏控制台 x:重新载入策略配置 转储系统和部署属性 转储线程列表 清除类载入程序高速缓存 0-5:设置跟踪级别为 图184浏览器中运行的 Applet 此时还会显示一个名为Java控制台的窗口,在这个窗口按下键c,可以清除日志信息,按 下X,然后刷新页面,可以重新载入Jaa类文件(这在调试Apet的时候很有用,因为浏 览器默认是缓存当前显示的 Applet的,不会每次都加载最新的类文件),其它的功能,大家 按照说明按下键盘上的提示就可以了。如果没有看到这个界面,多半您没有安装JRE 接着,我们看下 Applet标签的相对完整的说明 必需的属性 属性|值 描述 hegt|pxes定义 applet的高度 idth pixels定义 applet的宽度 codeURL执行 applet的cass的URL 可选的属性 属性 值 描述 align/ left 定义围绕 applet的文本排列方式 right baseline textor absmiddle absbottom 假如浏览器支持 applet,但无法运行此 applet时,被显 示的替换文本。 刘长炯著
MyEclipse 6 Java 开发中文教程 9 刘长炯著 图 18.4 浏览器中运行的 Applet 此时还会显示一个名为 Java 控制台的窗口,在这个窗口按下键 c,可以清除日志信息,按 下 x,然后刷新页面,可以重新载入 Java 类文件(这在调试 Applet 的时候很有用,因为浏 览器默认是缓存当前显示的 Applet 的,不会每次都加载最新的类文件),其它的功能,大家 按照说明按下键盘上的提示就可以了。如果没有看到这个界面,多半您没有安装 JRE。 接着,我们看下 Applet 标签的相对完整的说明: 必需的属性 属性 值 描述 height pixels 定义 applet 的高度 width pixels 定义 applet 的宽度 code URL 执行 applet 的 class 的 URL 可选的属性 属性 值 描述 align • left • right • top • bottom • middle • baseline • texttop • absmiddle • absbottom 定义围绕 applet 的文本排列方式。 alt text 假如浏览器支持 applet,但无法运行此 applet 时,被显 示的替换文本
MyEclipse6Java开发中文教程 archive URL 当 applet被存储在某个JAVA档案文件或ZIP文件中 时,此 applet的URL adscript|无 允许 Applet和浏览器的 JavaScript交互 codebase URL 指示 applet的基准URL,假如code属性是相对的。 定义围绕 applet的水平间隔。 name 定义针对 applet的唯一名称(用在脚本中的)。 name 定义了包含该 applet的一系列版本的资源名 在工具提示中显示的附加信息。 vspace pixels 定义围绕 applet的垂直间隔 。OK, archive是个很有用的功能,它可以将开发的类库打包成一个或者多个jar或者zip 文件(如何创建JAR我们此前已经讨论过),并以逗号隔开(注意是英文半角的),例如 当然,一般项目只放一个jar就可以了,多个的时候,务必保持所有的jar都在一个目录 下,否则会出现安全问题导致无法加载。其它有用的功能还包括上面小例子出现的 param 标签。 接下来要说的标签,就是 codebase,它是什么意思呢?假设类文件和HTML文件不在 目录下新建一个网页文件 My AppletRoot html,文件内容如下 MyApplet Test 对不起,您的浏览器不支持 Applet! </html 然后目录结构如此存放 My AppletRoot html bin/applets/MyApplet class 。现在打开此网页文件,很好,也能正确的显示我们的 Applet。反过来,不加 codebase, 浏览器就不知道到何处寻找类文件了。 刚才讨论了半天,是讲的本机运行时候的存放位置,另外发布到服务器上的时候,一定 要把 applet的类单独复制到 Webroot下面,保持刚刚讨论过的目录结构(也可以用jar方 式),才能让访问的用户看到 Applet 刘长炯著
MyEclipse 6 Java 开发中文教程 10 刘长炯著 archive URL 当 applet 被存储在某个 JAVA 档案文件或 ZIP 文件中 时,此 applet 的 URL。 mayscript 无 允许 Applet 和浏览器的 JavaScript 交互。 codebase URL 指示 applet 的基准 URL,假如 code 属性是相对的。 hspace pixels 定义围绕 applet 的水平间隔。 name unique_name 定义针对 applet 的唯一名称(用在脚本中的)。 object name 定义了包含该 applet 的一系列版本的资源名称。 title text 在工具提示中显示的附加信息。 vspace pixels 定义围绕 applet 的垂直间隔。 。OK, archive 是个很有用的功能,它可以将开发的类库打包成一个或者多个 jar 或者 zip 文件(如何创建 JAR 我们此前已经讨论过),并以逗号隔开(注意是英文半角的),例如: 。当然,一般项目只放一个 jar 就可以了,多个的时候,务必保持所有的 jar 都在一个目录 下,否则会出现安全问题导致无法加载。其它有用的功能还包括上面小例子出现的 param 标签。 接下来要说的标签,就是 codebase,它是什么意思呢?假设类文件和 HTML 文件不在 一个目录下,它就指明了 Java 类文件相对于 HTML 文件所在的位置,例如,我们在项目根 目录下新建一个网页文件 MyAppletRoot.html,文件内容如下: MyApplet Test 对不起,您的浏览器不支持 Applet! ,然后目录结构如此存放: MyAppletRoot.html bin/applets/MyApplet.class bin/applets/usb.jpg 。现在打开此网页文件,很好,也能正确的显示我们的 Applet。反过来,不加 codebase, 浏览器就不知道到何处寻找类文件了。 刚才讨论了半天,是讲的本机运行时候的存放位置,另外发布到服务器上的时候,一定 要把 applet 的类单独复制到 WebRoot 下面,保持刚刚讨论过的目录结构(也可以用 jar 方 式),才能让访问的用户看到 Applet