创建交互式Web程序
Java是第一款可以再Web浏览器上运行的编程语言。Applet是作为Web页面的一部分运行的Java程序。当在页面中遇到Java applet时,它将被下载到用户的计算机然后再开始运行,因此为了缩短下载时间,它们比大多数应用程序都要小。另外applet是在使用它的用户计算机上运行的,为阻止恶意或破坏行为的代码运行,对applet会有众多安全限制。
1、标准applet方法
创建applet的第一步是将其声明为JApplet的子类,后者位于Swing包javax.swing中。Applet被视为Web页面内的一个可见的窗口,因此JApplet与按钮、滚动条及其他用户界面组件一样,也是Swing的一部分。
你编写的applet在作为Web页面的一部分运行时,可以继续所需的所有属性和行为。在开始编写applet程序的语句之前,它们就能与Web浏览器交互、自我加载和卸载,并根据浏览器窗口的变化刷新其窗口以及处理其他必要的任务。
Java applet没有main()方法,因此无法设置程序的起点,但是它有一组标准方法,它们在applet运行时为响应特定事件而被调用。下面是可能导致applet方法被调用的事件:
>程序第一次加载时,applet的方法init()和start()被调用;
>当需要重新显示applet窗口时,applet的paint()方法被调用;
>浏览器停止运行程序时,applet的stop()方法被调用;
>程序停止后重新运行时,applet的start()方法被调用;
>程序运行完后卸载时,applet的destroy()方法被调用。
下面是applet的框架:
Public class test01 extendsjavax.swing.JApplet{ }
Applet类文件必须是public的,因为JApplet类也是public的(如果applet使用自定义类,则可以不声明为public)。Applet类继承所有必要时自动调用的方法:init()、start()、paint()、stop()、destroy()。但是这些方法什么也不做,需要我们重写写着方法。
1)、在applet窗口中绘画
Paint()方法用于在applet窗口中显示文本和图形。需要在applet窗口中显示或重新显示内容时(即浏览器或运行浏览器的操作系统有什么变化时,例如遮挡窗口关闭),将调用paint()方法。也可以使用repaint()方法强行调用paint()。
Public void paint(Graphics screen){
Graphics2D screen2D = (Graphics2D)screen;
}
Graphics类表示可在其中显示内容的环境。和Swing程序中一样,可以将其转换为Graphics2D对象,以实用Swing的图形功能。
2)、初始化applet
当applet运行时,将调用init()方法,而且只调用一次。所以这里是对applet成功运行所需的对象和变量进行设置的理想位置。该方法也是设置字体、颜色和屏幕背景色的理想位置,下面是一个例子:
public void init() {
FlowLayout layout = new FlowLayout();
setLayout(layout);
JButton button = new JButton("运行");
add(button);
}
3)、启动和停止applet
每当开始运行applet程序时,都将调用start()方法。当程序首次运行时,init()方法后面紧跟着start()方法。之后,只有当applet在某处停止执行,并需要启动时,才调用start()。
Applet停止执行时,将调用stop()方法。当用户从包含applet的Web页面离开并切换到其他页面时将发生该事件。直接在程序中调用stop()方法时,也会发生该事件。
4)、销毁applet
Destroy()方法与init()方法相反,仅当applet被完全关闭并结束运行前被调用。
2、将applet放到Web页面中
在Web页面中放置applet时,需要使用HTML,这是一种用来创建Web页面的标记语言。HTML可以将格式化文本、图像、声音和其他元素组合起来,并显示在Web浏览器中。关于HTML的标记和用法在这里就不说了,下面是一个将a1.jpg显示在页面上的例子:
<img src=”test/picture/a1.jpg”>
在applet的一个方法是使用applet标记和几个属性。下面的HTML标记将在一个页面上运行applet:
<applet code=”mytest01.class”codebase=”java.application.main” height=”300” width=”400” align=”left”>
<p>抱歉,您的浏览器不支持java applet程序</p>
</applet>
>Code属性指定applet类的文件名,如果applet使用了多个类文件,code应指定作为JApplet子类的那个类;
>Codebase属性包含applet和相关文件所在的文件夹或子文件夹的路径。如果没有codebase属性,与applet相关的所有文件必须与包含applet的Web页面位于同一个文件夹中。上面的例子中可以在java/application/main文件夹中找到mytest01.class。
>Height和width指定applet窗口在Web页面中的大小,单位为像素。
>Align属性指定applet同页面中其他元素的相对关系,上面的例子是将applet放在相邻页面元素的左边。
3、创建applet
下面是程序是用applet程序显示字符串“Saluton mondo!”,这是传统的世界问候语。
public class NewJAppletextends JApplet {
String greeting;
public void init() {
greeting = "Saluton mondo!";
}
@Override
public void paint(Graphics g) {
Graphics2D g2D = (Graphics2D)g;
g2D.drawString(greeting, TOP_ALIGNMENT,TOP_ALIGNMENT);
}
1)、在applet窗口中绘画
使用Graphics2D类的drawString()方法在applet窗口中显示文本,该方法是在图形组件中绘制文本。
drawString(java.lang.Stringstr, float x, float y)
str:需要显示的文本
x:在(x,y)坐标系中要显示字符串的x位置
y:要显示字符串的y位置
applet的多个方法都使用了(x, y)坐标系,它以applet窗口的左上角为原点。当向右移动时x增大,向下移动时y增大。
2)、测试程序
由于Java applet没有main()方法,因此不能像应用程序那样运行。必须在包含applet的Web页面中添加标记。为了创建test01的Web页面示例,请按照下面的步骤在BetBeans中创建一个新的Web页面。
(1)、文件→新建文件,打开“新建文件”对话框:
(2)、从“类别”面板中选择“其他”,从“文件类型”中选择HTML文件,然后单击“下一步”按钮,将文件重命名,点击“完成”按钮
下面是测试代码:
<html>
<head>
<title>Saluton mondo!</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
</head>
<body bgcolor="#000000" text="#FF00FF">
<p>这是一个Java applet</p>
<applet
code="test01.class"
codebase="javaapplication1/test01.class"
height="150"
width="300">
<p>您的浏览器不支持Java Applet</p>
</applet>
</body>
</html>
保存后可以在Project面板右键单击你的HTML文件,选择视图,即可在浏览器中打开
4)、从Web页面传递参数
使用存储在HTML标记中的参数,可以自定义applet的功能,而且该参数的目的与应用程序中作为命令行输入的参数相同。
参数存储在包含applet的Web页面中,是通过HTML标记param及其练个属性name和value创建的。在applet中可以有多个param标记,但他们都必须位于标记<applet>和</applet>之间。下面是一个包含多个参数的applet标记:
<applet code=”test”height=”50”width=”400”>
<param name=”a1” value=”abcdefg”>
<param name=”a2” value=”hijklmn”>
<param name=”a3” value=”opqist”>
</applet>
上述代码可用于向applet发送新闻提要,该applet在屏幕上滚动显示这些新闻提要。由于新闻在不断变化,创建这种程序的位移办法是使用参数。
5)、在applet中接收参数
通过调用applet的getParameter(String)方法,可以访问applet中的参数,其中name属性指定的参数名作为上述方法中的参数,如下所示:
String name =getParameter(“heandline1”);
getParameter()方法将参数作为字符串返回,因此必要时必须将其转换为其他类型。如果要将返回的参数作为整型使用,可用如下语句:
int speed;
String speedParam= getParameter(“speed”);
If(speedParam !=null) {
speed = Integer.parseInt(speedParam);
}
这里使用speedParam字符串来设置整型变量speed的值。使用getParameter()方法检索参数,而该参数没有在网页中使用param标记指定时,getParameter()方法将返回null。
6)、在applet中处理参数
接下来要编写的applet程序将接受一个人的体重,并以不同的单位进行显示。该applet将接受两个参数:以磅为单位的体重,以及该体重对应的人名。体重用于计算用盎司、千克和吨为单位表示的体重,并将它们显示出来。
public classtest01 extends JApplet {
float lbs = 0f;
float ozs , kgs , metricTons;
String name = "somebody";
public void init() {
String lbsvalue =getParameter("weight");
if (lbsvalue != null) {
lbs = Float.valueOf(lbsvalue);
}
String personValue =getParameter("person");
if (personValue != null) {
name = personValue;
}
ozs = (float)(lbs * 16);
kgs = (float)(lbs / 2.204623);
metricTons = (float)(lbs / 2204.623);
}
@Override
public void paint(Graphics g) {
Graphics2D g2D = (Graphics2D)g;
g2D.drawString("Studying theweight of" + name, 5, 30);
g2D.drawString("In pounds:" +lbs, 55, 50);
g2D.drawString("In ounces:" + ozs,55, 70);
g2D.drawString("Inkilograms:" + kgs, 55, 90);
g2D.drawString("In metrictons:" + metricTons, 55, 110);
}
}
在测试applet之前,需要创建一个包含该applet的Web页面,创建方法同上,代码如下,然后在浏览器中将其打开,代码和结果如下:
<applet code="test01.class"codebase="..\\..\\build\\classes"
height="170"width="210">
<paramname="person" value="konishiki"/>
<paramname="weight" value="605"/>
</applet>
7)、使用object标记
在HTML5中加载入Java applet、Flash程序以及其他格式的交互式内容时,使用的不再是<applet>标记,而是<object>。与<applet>相同,该标记也有height和width属性,不过它还有另外一个类型的属性――application/x-java-applet,这是MIME为Java applet设定的类型(MIEI类型对可以经由Internet传输的文件格式进行了分类)。下面是一个对象的格式示例:
<object type=”application/x-java-applet”height=”300” width=”400”></object>
applet的code和codebase没有作为参数指定,相反,这两个参数被放置在<object>和</object>标记之间。
下面的HTML5标记可以显示一个applet:
<object type=”application/x-java-applet”height=”300” width=”400”>
<param name=”code” value=”stripYahtzee”/>
<param name=”codebase” value=”javadir”/>
<p>Sorry,no dice</p>
</object>