}
southPanel.add(resetButton); southPanel.add(controlButton);
}
读取参数并转换为颜色的代码,集中在init()方法中,如果取不到颜色,就默认把背景色设置为黑,前景色设置为绿。而画图的代码,集中在paint(Graphics)方法中,其实图形对象Graphics只有一个颜色属性,所谓的背景色是通过把背景全部涂摸,使用一个大小和Applet相同的矩形进行填充后得到的;接下来则重新设置颜色后,绘制下面的内容。这两处的代码都以粗斜体的格式在代码中标出了。这样,只要通过修改参数中的颜色取值,就可以让Applet显示出不同的外观来。这个例子展示取参数的代码很简单,复杂的就是剩下的内容,读者没有必要现在就去全部弄懂,根据我学习的经验,那也是不可能看一遍就全懂的,需要大家慢慢的通过查资料来掌握。 接下来的例子,我们就是来研究Applet和JavaScript的互操作。要开发能和脚本交互的Applet,首先第一个需要设置的地方是在网页嵌入Applet的标签中加入mayscript,例如这样的代码片段:。有了这个mayscript参数后,就可以通过浏览器的JavaScript来调用Applet中的访问修饰符为public的公开方法了,调用方式是要给Applet起名字,例如刚才代码中的applet1,然后通过Applet的名字作为对象来调用,例如:applet1.someMethod(参数1,参数2)。 如果是需要在Applet中调用JavaScript,则必须使用一个名为Netscape JSObject的包,这是因为Netscape浏览器是第一个支持Java Applet和JavaScript互访问的浏览器,虽然这款浏览器已经不再是老大,但是这个贡献却是一直留到现在的。这个类库一共包括两个包:netscape.javascript和netscape.security,包含的类列表如图18.10所示。其中和脚本访问的主要就是JSObject,对应JavaScript语言中的var这个概念,另外还可以将Java对象转换为JavaScript中可以访问的对象。
图18.10 Netscape JavaScript访问包
那么JSObject的功能,在参考资料的NetscapeJavaScript 包文档有很详细的说明,只可惜内容都是英文的。那么如何在Applet中执行JavaScript呢?首先自然是获取window对象,也即当前包含applet的这个窗口的对应的JavaScript的window对象,当然在Java中它的表现形势为JSObject对象,代码如下:
26
刘长炯著
JSObject window = JSObject. getWindow (this);
代码中的this表示当前applet对象自身。随后可以使用该对象的方法来进行操作了。使用getMember()方法可以获取对象的成员的取值,例如 String title = (String) window.getMember(\
可以获取当前页面的标题。那么如何调用对象的方法呢?例如JavaScript有个内置的弹出提示框的方法alert(参数),那么有两个JSObject的方法可以用来调用脚本的方法,一个是call()方法,其签名为:
public Object call(String methodName, Object args[])
等价于在JavaScript中调用\,还可以获得返回值。例如:window.call(\中调用JavaScript\这段Java代码,等
另一个方法就是eval()方法,价与调用JavaScript代码:alert(\中调用JavaScript\。
签名为:
public Object eval(String s)
,这个和JavaScript的eval()方法功能是一致的,即将字符串内容作为一段脚本语句来解释执行(其实call()方法也是JavaScript本身就支持的一个方法))。那么同样是实现弹出对话框,代码为:
window.eval(\中调用JavaScript');\
好了,有了这些描述信息,我们就可以进行开发了。首要解决的是,从哪里找到这个Netscape的JavaScript包呢?答案是它包含在文件C:\\jdk1.6.0_10\\jre\\lib\\plugin.jar中,在MyEclipse ALL in ONE版本的jre目录下也可以找到:D:\\MyEclipse6.0\\jre\\lib,或者是单独安装的jre的lib目录下也有这个文件。将plugin.jar复制到当前项目,并加入Build Path,之后就可以开发我们的JSApplet的例子了。新建类文件applets.JSApplet,其代码清单如下:
JSApplet.java
package applets;
import java.applet.Applet; import java.awt.Color;
import netscape.javascript.JSObject;
public class JSApplet extends Applet {
public void init() {
setBackground(Color.green); try {
// 使用 JSObject 调用脚本
JSObject.getWindow (this).eval(\中调用JavaScript');\);
// 等价的调用代码,使用call()方法
//JSObject.getWindow (this).call(\
{\中调用JavaScript\ }
catch (Exception ex){}
}
27
刘长炯著
/**
* 对外公开的方法,更改背景色。 * @param red 红色分量 * @param blue 蓝色分量 * @param green 绿色分量 */
public void changeBg(int red, int blue, int green) {
setBackground(new Color(red, blue, green)); } }
。代码在init()方法中设置背景色为绿色,然后调用了JavaScript弹出对话框,并公开了一个changeBg()的方法,来给JavaScript做调用。 接着看测试用的HTML网页的代码清单: src/JSApplet.html
请输入颜色值(范围0~255):
红:
绿:
蓝:
。在这个代码中,设置了三个HTML的文本输入框,用来输入红绿蓝三色设置,并提供了一个HTML的按钮来触发调用,调用applet方法的代码位于changeColor()这个JavaScript的方法中。随后在bin(或者classes目录)下,用浏览器打开这个网页(注意,这个例子用模拟器是测试不了的,不能通过Eclipse的Run As Applet来看到正确输出),稍后则可得到如图18.11所示上方所示的输出。而下方的两个图,则分别是改变颜色前后的Applet显示界面。至此我们可以看到,Applet和JavaScript充分实现了互动。
28
刘长炯著
图18.11 在浏览器中运行JSApplet
18.2.6 从JDK的自带例子中学习Applet和图形界面编程
如果您要学习Applet或者AWT/Swing的图形界面开发,第一个途径是JDK中文文档(参考第一章内容),来查看类的说明文档;第二个途径就是看代码,搜教程。有个很好的代码可以参考,就是JDK下面有个demos目录,里面包含了两个子目录,分别是applets和jfc,包含了大量的applets例子和Java的Swing的例子,其中不乏高难度的代码,当然也有很入门的代码。Applets的运行很简单,双击网页例如example1.html或者index.html即可打开,源代码就在目录下,其中有个关于排序算法的Demo值得大家研究下(如果对画图没有兴趣就算了,主要是有人面试会变态的考什么快速排序,冒泡排序),这个目录名为SortDemo,可以看看其中的几个排序算法的类,或者干脆上网找找这方面的资料。而jfc的一般是jar方式的,可以在安装JRE的情况下双击运行或者使用命令java –jar Notepad.jar来运行。这些代码注释都比较全(虽然是英文,可以用免费的谷歌金山词霸来翻译),国际化之类的概念也用的比较多,可以作为一种提高的手段。
小提示:如果要播放声音,请查看Applet中几个和AudioClip有关的方法说明。另外,Java默认支持的声音格式很有限,包括:AU,MIDI,AIFF,WAVE,文件后缀
29
刘长炯著
为:.au,.mid,.aiff,.wav。不直接支持常见的MP3等格式(有可以单独下载的开源解码器,见参考资料)。AudioClip 接口是用于播放音频剪辑的简单抽象。多个 AudioClip 项能够同时播放,得到的声音混合在一起可产生合成声音。
18.3 使用Matisse4MyEclipse开发AWT/Swing应用
18.3.1 安装开发插件
Matisse4MyEclipse插件既可以安装在MyEclipse上,也可以安装在单纯的Eclipse 3.3上。我们主要看MyEclipse下如何安装,选择菜单 MyEclipse > Add Features...,接着在弹出的MyEclipse Quick Install对话框中,选中第一个复选框Matisse4MyEclipse Swing UI Designer 6.0.2.zmyeclipse602200712,接着点击对话框的Finish按钮即可开始下载和安装过程,此对话框参考图18.12。MyEclipse还提供了一些其它的插件供下载,例如报表的和ICEfaces的开发插件。整个下载包大概需要7MB,下载完之后,会弹出标题为Install/Update的对话框提示重启MyEclipse,重新启动即可完成安装。在单纯Eclipse下(即没安装任何其它插件,包括MyEclipse的版本)的安装过程步骤比较复杂,参考帮助文档中的内容(英文的,但是图片和步骤很清楚),点击菜单Help > Help Contents,接着在弹出的帮助文档浏览器中选择左侧的Contents栏中的树中的节点:Swing Development (Matisse4MyEclipse)Overview > Getting Started > Installation,在右侧文章中选择书签Installation (for MyEclipse) 和Installation (for Eclipse)即可浏览到详细的帮助内容。
图18.12 MyEclipse Quick Install对话框
18.3.2 可视化开发Applet
前面我们已经做了半天Applet,不过都是手写代码,现在让我们来可视化的开发一个Applet(当然,画图方法里面的代码,是可视化不了的,只能做做界面),我们将详细的讨论界面设计器的使用方式。MyEclipse提供了一个专门进行Swing界面开发的透视图,名为MyEclipse Swing/Matisse,所以先切换界面到透视图MyEclipse Swing/Matisse。我们仍然在AppletTest这个项目中继续开发,选择菜单File > New > Other...,然后在弹出的New对话框第一页中,展开左侧目录并选中项目MyEclipse > Swing > Matisse Form,如图18.13所示;也可以直接选菜单File > New > Matisse Form。接着点击Next按钮,进入第二页:New Matisse Form Class向导,如图18.14所示。在这一页有众多的模板(template),现列举如下:
30
刘长炯著