applet程序的编写 2.docx

上传人:b****8 文档编号:28812189 上传时间:2023-07-19 格式:DOCX 页数:53 大小:48.47KB
下载 相关 举报
applet程序的编写 2.docx_第1页
第1页 / 共53页
applet程序的编写 2.docx_第2页
第2页 / 共53页
applet程序的编写 2.docx_第3页
第3页 / 共53页
applet程序的编写 2.docx_第4页
第4页 / 共53页
applet程序的编写 2.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

applet程序的编写 2.docx

《applet程序的编写 2.docx》由会员分享,可在线阅读,更多相关《applet程序的编写 2.docx(53页珍藏版)》请在冰豆网上搜索。

applet程序的编写 2.docx

applet程序的编写2

Applet程序的编写

Applet是什么

⏹Applet又称为Java小应用程序,是能够嵌入到一个HTML页面中,并且可通过Web浏览器下载和执行的一种Java类。

⏹Applet不需要main()方法,由Web浏览器中内嵌的Java虚拟机调用执行。

通常我们在写程序的时候,如果要想程序能够运行,我们需要在程序中写main方法,而Applet执行不需要main方法,是由嵌入到Web浏览器中的Web虚拟机调用执行,我们在安装JDK的时候,就会给我们IE浏览器嵌入一个插件,这个插件就是用来给我们执行AppletJava小应用程序的。

Applet的安全限制

⏹因为applet是从远端服务器上下载并且在本地执行,所以安全性就显得格外重要。

如果我们从网络下载一个Applet能够随意地访问我们本地计算机的资源,,那么就有可能将我们本地计算机的密码,帐号信息通过Internet传输出去,,这样的后果相当严重。

⏹通过限制applet在沙箱(applet的运行环境)中运行,保证了对本地系统而言applet是安全的。

⏹applet在沙箱中运行时:

⑴不能运行任何本地可执行程序;

⑵除了存放下载的applet的服务器外,applet不能和其它主机进行通信。

也就是说当我们从远端服务器上下载applet的时候,这个applet只能和这个服务器进行通信,不能和其他主机进行通信。

⑶不能对本地文件系统进行读写

下面我们看帮助文档。

在java.applet中有一个类,叫做applet,

java.applet

ClassApplet

java.lang.Object

java.awt.Component

java.awt.Container

java.awt.Panel

java.applet.Applet

编写一个java小应用程序,就是编写一个类,让这个类,从applet派生而来Applet这个类它是从java。

Awt。

panel这个类派生而来,,所以applet中添加像button,复选框这样的组件,因为applet是从panel派生出来的

Panel缺省的布局管理器是flowlayout,所以applet缺省的布局管理器也是flowlayout,在applet类中有四个方法,表示了applet的生命周期。

void

destroy()         

void

init()

void

start()

void

stop()

这四个方法就表示了一个applet它的生命周期,下面编写一个java小应用程序。

importjava.applet.*;//导入applet中所有的类,但是我们在编写java小应用程序的时候,因为小应用程序是在网络上加载运行的,但我们用到一个包中某一个类,而我们采用的是导入这个包中所有的类在本地运行的时候不会有太大的影响,但是如果通过网络载一个类的时候,因为导入了一个包中所有的类,加载的时候效率会有影响,所以我们在编写一个java小应用程序的时候,,最好是用到哪个类而导入哪个类,而不要导入包中所有的类,我们测试的时候为了简单可以将包中所有的类都导入publicclassTestAppletextendsApplet写类的时候可以声明为public,也可以声明为缺省的类但是我们在编写一个java小应用程序的时候,所定义的的类要声明为public,否则的话浏览器就无法加载我们的类,因为用到applet,所以要引入包

{

//重写四个方法

publicvoidinit()

{

System.out.println("init");

}

publicvoidstart()

{

System.out.println("start");

}

publicvoidstop()

{

System.out.println("stop");

}

publicvoiddestroy()

{

System.out.println("destroy");

}

}

编译源文件,因为在小应用程序类中没有main方法方法,所以不能用java解释器去运行,applet是嵌入在网页中运行的的类,所以我们要编写一个网页文件。

新建一个文本文档,后缀为html,去测试,

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">

code=".class"//用来解释网页加载的字节码文件

//applet在网页中显示的时候所占用的宽度和高度

width="500"

height="300"

>

运行,applet类已经被我们浏览器加载运行了,为什么没有看到没有看到打印输出的文字呢,在我们的屏幕上打印输出文字,在我们的浏览器中看不到我们输出的文字。

如何看到呢?

可以利用sun公司提供的测试java小应用程序的工具,appletviewer

在bin目录下面,这个工具就是用来测试我们所编写的java小应用程序的。

Javac

AppletviewTestApplet.html

调用了init,和start方法

在菜单里面选择停止的时候,看到调用stop方法,选择启动的时候

选择启动的时候,看到其调用了start方法,选择重新启动的时候,看到先调用stop方法,然后destroy方法,然后init方法,然后start方法,启动start方法。

在执行的时候,四个方法执行的顺序是先启动init,然后调用start方法,当我们的applet要销毁的时候,我们调用的是destroy方法。

Applet的生命周期

⏹init():

当浏览器加载applet,进行初始化的时候调用该方法。

在我们编写applet的时候,不需要提供构造方法,应该将所有的初始化操作都放到init方法当中,因为当一个applet构造方法调用的时候,实际上在浏览器编辑环境中,有一些初始化的工作没有完成,所以将一些初始化工作放在init方法中,而不需要放在小应用程序的构造方法中,我们也不需要提供一个这样的构造方法。

⏹start():

在init()方法之后调用。

当用户从其它页面转到包含applet的页面时,该方法也被调用。

⏹stop():

在用户离开包含applet的页面时被调用。

也就是说当一个applet不可见的时候,会调用一个stop方法,当它重新可见的时候,会调用一个start方法。

⏹destroy():

当applet不再被使用,或浏览器退出的时候,该方法被调用。

Applet退出的时候,会调用destroy方法。

这就是applet的生命周期。

它还有一个好处,

因为appletviewer只认applet,不管标签放在哪个文件当中的,,通常测试的时候,可以直接在。

Java的源文件当中,写上一个注释,然后将

code="TestApplet.class"

width="500"

height="300"

>

拷贝

放在源文件中,并且注释起来,当我们在执行的时候,可以利用appletview直接执行后缀名为java的源文件。

,因为appletviewer这个工具会忽略除了applet这个标记之外的其他任何语句,,所以这些代码都被忽略了,包括用来注释的反斜杆,只是执行applet标记中的代码,所以看到直接。

Java这个文件,小程序查看器就加载了这个TestApplet这个类,然后执行。

这样的话就不需要针对每一个applet类去写一个网页文件了,这样在测试的时候是极为方便的,,当然正式发布的时候,还是需要写一个网页文件进行实际的测试,这是我们appletviewer这样的工具只认applet标记,

我们如何在一个applet上面显示输出我们一行文字呢

看一下ppt

paint()方法

⏹Applet本质上是图形方式的,我们应该在图形环境中绘制我们的显示内容。

⏹我们可以通过创建一个paint()方法在Applet的panel上绘图。

只要Applet的显示需要刷新,paint()方法就会被浏览器环境调用。

例如,当Applet的显示尺寸发生变化的时候,或浏览器窗口被最小化或被要求以图标方式显示时,这种调用就会发生。

看帮助文档,在applet这个类上,查找paint方法,container这个类中有个paintt方法,我们applet这个类从container这个类继承了这个paint方法,

paint

publicvoidpaint(Graphics g)

Paintsthecontainer.Thisforwardsthepainttoanylightweightcomponentsthatarechildrenofthiscontainer.Ifthismethodisreimplemented,super.paint(g)shouldbecalledsothatlightweightcomponentsareproperlyrendered.Ifachildcomponentisentirelyclippedbythecurrentclippingsettinging,paint()willnotbeforwardedtothatchild.

Overrides:

paintinclassComponent

Parameters:

g-thespecifiedGraphicswindow

SeeAlso:

有一个参数,它的类型是个Graphics,我们看

java.awt

ClassGraphics

java.lang.Object

java.awt.Graphics

DirectKnownSubclasses:

DebugGraphics,Graphics2D

publicabstractclassGraphics

extendsObject

TheGraphicsclassistheabstractbaseclassforallgraphicscontextsthatallowanapplicationtodrawontocomponentsthatarerealizedonvariousdevices,aswellasontooff-screenimages.

Graphics这个类是来表示图形上下文的抽象基类,允许一个应用程序在各种不同的设备在实现的组件上绘图,这句话是指我们知道作为一个图形的现实来说,它是显示设备来完成显示的工作,Graphics这个类封装了显示细节,也就是屏蔽底层显示的细节,要想绘制一个图形,只需要获取一个Graphics这个类的对象,利用这个对象的方法,就可以完成我们绘制图形的工作。

比如说我们要想在

Applet上显示输出一行文本,可以利用类中的drawstring方法

abstract void

drawString(String str,int x,int y)

          Drawsthetextgivenbythespecifiedstring,usingthis

方法第一个参数是string类型,后面两个参数是x坐标和y坐标,用来指示我们在哪个位置上面画我们字符串。

使用图形上下文当前的字体和颜色。

⏹我们应该编写自己的paint()方法,以使它在任何时候被调用,都能正常地工作。

也就是说我们应该在我们自己的类当中,去覆盖父类的paint方法,

⏹对它的调用是异步产生的,且由Applet的运行环境而不是程序来驱动。

也就是说在程序当中,不应该自己去调用paint方法,paint方法调用是由applet运行环境来调用的,

⏹paint()方法带有一个参数,它是java.awt.Graphics类的一个实例。

这个参数总是建立该Applet的panel的图形上下文,我们可以用这个图形上下文在Applet中绘图或写入文本。

那么这个图形上下文,可以理解为我们做图和底层的显示实现细节的抽象层。

利用图形上下文就可以完成我们图形绘制和文本输出的工作。

下面演示重写paint方法

importjava.awt.*;

publicvoidpaint(Graphicsg)

{//Graphics这个类是AWT中的类,要导入

g.drawString("维新科学技术培训中心",0,0);

}

执行网页appletviewerTestApplet.html

看到小程序已经启动了,但是在屏幕上面,我们好像没有看到我们的文字输出,那么把这个文字输出,看ppt

g.drawString("gggggggggggggggg",0,0);

再次执行,观察,看到屏幕上看到g字母的下面的一部分,但是g字母在applet上没有完整显示出来,是什么原因呢。

我们看一下啊ppt

字符的各种属性

descentline

对于字符来说有一些属性,当我们显示一个字符的时候,,是以一个机械的位置开始显示,当显示的时候是以基线所在的位置开始显示,因为我们在00的位置,上输出我们的文字,显示的时候是以基线的位置开始显示,所以在基线以上的部分我们就没有看到,而基线以下的部分,显示出来了。

在这个地方还有一个升序线,是在上面也就是字符最高的位置,就是我们的升序线,在升序线和基线之间的距离,我们叫做这个升序的高度,还有个降序线,是字母最低的位置,在基线和降序线之间这个高度是我们降序高度,还有个高度叫做leading值得,它是指我们这行文本的降序线和下一行文本的升序线之间的距离,叫做leading

对于我们字符的高度,就是我们升序的高度加上降序的高度再加上leading的距离,作为字符的高度。

知道属性之后,我们就知道为什么不可以看到整个字符内容了,,在java中有个类,来帮助我们获取字符的属性。

在awt包中,

java.awt

ClassFontMetrics

java.lang.Object

java.awt.FontMetrics

AllImplementedInterfaces:

Serializable

 int

getAscent()

 int

getDescent()

 int

getHeight()

 int

getLeading()

因此我们要获取一个字符属性的话,我们就会产生一个fontmetrics对象,,然后调用其中的方法。

g.drawString("gggggggggggg",0,30);

执行。

下面我们改变一下我们输出文字的字体,要创建字体有个类font,

java.awt

ClassFont

java.lang.Object

java.awt.Font

AllImplementedInterfaces:

Serializable

看构造方法

protected

Font(Font font)

          CreatesanewFontfromthespecifiedfont.

 

Font(Map

extendsAttributedCharacterIterator.Attribute,?

> attributes)

          CreatesanewFontwiththespecifiedattributes.

 

Font(String name,int style,int size)

Font

publicFont(String name,

int style,

int size)

第一个参数是字体的名字在java中支持的字体是有限的,第二个是字体的类型,要输出的字体是简单的普通格式,还是其他粗体,或者斜体等。

第三个参数是字体的大小。

Fontf=newFont("楷体_2312",Font.BOLD,30)

将字体加入到当前的图形上下文中,当我们利用图形上下文绘制字符串的时候字体的改变,才能生效,利用Graphics中的

abstract void

setFont(Font font

可以设置字体为指定的字体

Fontf=newFont("楷体_2312",Font.BOLD,30);

g.setFont(f);

g.drawString("城市轨道通信",0,30);

可以看到以楷体的方式显示,而且字体的大小,明显加大了,这是利用font类创建字体,加入到图形上下文中,输出我们的文字,还可以改变输出文字的颜色。

g.setColor(Color.blue);

执行,看到蓝色的显示输出文字。

Applet如何从网页中获取信息呢

正如应用程序可以通过命令行参数来获取信息一样,通过使用param标记,applet可以从网页中获取信息。

 

在网页html文件中加入param标记

code="TestApplet.class"

width="500"

height="300">

;

对于applet来说,如何去获取网页中设定的名字为font的值呢。

看帮助文档。

Applet

getParameter

publicStringgetParameter(String name)

Returnsthevalueofthenamedparameter

就是用来获取我们在html一个命名的参数的值,就可以在applet中利用getParameter来获取,我们名字为font的值,

importjava.awt.*;

importjava.applet.*;//导入applet中所有的类

publicclassTestAppletextendsApplet

{

StringstrFont;

//重写四个方法

publicvoidinit()

{

strFont=getParameter("font");//会返回font的值

System.out.println("init");

}

publicvoidstart()

{

System.out.println("start");

}

publicvoidstop()

{

System.out.println("stop");

}

publicvoiddestroy()

{

System.out.println("destroy");

}

publicvoidpaint(Graphicsg)

{

Fontf=newFont(strFont,Font.BOLD,30);

g.setFont(f);

g.setColor(Color.blue);

g.drawString("城市轨道通信",0,30);

}

}

/*

code="TestApplet.class"

>

*/

看到现在输出以楷体方式显示的。

通过在网页当中,设定applet属性,所需要的信息,给我们提供了实践上的灵活性,我们可以根据需要,随时修改在网页中的信息。

而不需要重新去编译我们applet,这是applet从网页中获取信息。

Applet可以与用户之间直接进行交互。

当用户在Applet上面点击鼠标,那么Applet可以响应这个事件,并且对这个事件进行处理,下面我们看如何在applet上面去画一个线条。

分析画线的过程,一个线是由两个点组成的,也就是获取两个点,然后画线,我们画线的时候,是我们当鼠标左键按下去的时候,这个时候

就可以获取到一个点,鼠标左键按下去就有个鼠标事件发生。

我们可以响应这个时间,在响应这个事件的时候,我们在同时获取到一个点,当我们按下鼠标左键,在我们窗口上面拖动的时候,当我们松开鼠标左键的时候,又可以获取一个点也就是只要响应鼠标左键松开这样一个事件,那么我们就可以获取到另外一个点,有了这两个点,就可以画一条线了,我们在applet增加鼠标监听器,一旦有鼠标事件发生的时候,

就由监听器去进行处理。

如果我们对java中命名比较熟悉的话,我们知道java中有个mouselistener这个监听器,相应的方法就是addmouselistener。

增加窗口监听器,就是一个addwindowlistener

java.awt.event

ClassMouseAdapter

void

mousePressed(MouseEvent e)

          Invokedwhenamousebutton

void

mouseReleased(MouseEvent e)

          Invokedwhenamousebuttonhasbeenreleasedon

重写

intxOrigin,yOrigin;

addMouseListener(newMouseAdapter()//利用匿名内部类完成

//MouseAdapter是空实现,适配器中所有的方法都是空实现

{

publicvoidmousePressed(MouseEvente)

//MouseEvent这个类给我们提供了2个方法,一个是getx,一个是gety

{

xOrigin=e.getX();

yOrigin=e.gety();

}

//响应鼠标左键松开事件,捕获事件

//刚才我们是在paint方法中做图,有个方法是graphics

//所以我们直接利用graphics对象做图

//但是在mousereleased中没有graphics对象,如何去画一条线呢

//首先要想办法去获取一个graphics对象因为graphics是个抽象

//的类,不能直接实例化,在applet中有没有相应

java.applet

ClassApplet

getGraphics

publicGraphicsgetGraphics()

这个方法就是用来创建一个组件的图形上下文。

利用此获取图形上下文。

Graphics

abstract void

drawLine(int x1,int y1,int x2,int y2)

          

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1