




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章Java
Applet西安职业技术学院动漫软件学院第九章 Java
Applet
及GUI设计Applet的工作原理Applet类的使用Applet与html文件的配合绘制用户自定义成分Java中的动画编程GUI设计Java
AWT事件处理机制S
wing基础Java小应用程序(Java
Applet)是使用Java语言编写的一段代码,Applet是一种为通过
Web浏览器在Internet上工作而设计的Java程序。它能够在浏览器环境中运行。并由支持Java的Web浏览器来解释执行。Applet与Application地主要区别在于它们的执行方
式不同:Application是使用命令行命令直接运行,从其
main()方法开始运行的;而Applet则是在浏览器中运行的,首先必须创建一个HTML文件,它嵌入在HTML网页中,通过
编写HTML语言代码告诉浏览器载入何种Applet以及如何运
行,再在浏览器中给出该HTML文件的URL地址即可,Applet本身的执行过程也较Application复杂。9.1、
Applet的工作原理1、
Java
Applet的基本概念Applet的主要作用:形成动态可交换式的网页,并可利用浏览器中所提供的图形功能显示及处理图像处理用户界面、网络通讯、用户事件处理、访问后台数据库等功能。在Java出现之前,人们就已经开始使用HTML(超文本标记语言)进行Web页面的设计了。然而,对
HTML稍有了解的人都知道,HTML所提供的设计
能力是极其有限的。Java率先提供了让Web页面实现更丰富的GUI和逻辑运算能力的方法,这种方法是通过将一个Java的类插入到Web页面中来实现的。Applet的工作原理如图所示下载html文件请求Applet字节码下载Applet字节码WWW服务器WWW服务器请求html文件解释执行Applet字节码Applet的工作原理WWW服务器html文件Applet嵌入
Applet标记名9.2、Applet类的使用1.Applet类层次要编写一个Applet,必须首先从java.applet.Applet派生一个类:import
java.applet.*;public
class
SimpleApplet
extends
Applet{…}需要注意的是,派生出的Applet的类必须定义为public类型。java.applet.Applet类实际上是java.awt.Panel的子类。Applet和AWT类的继承关系如图所示。这种层次关系显示,而Applet类又是
java.awt.Panel类的子类,因而具有
Component类的能力,同时它又是一个
Container类的子类,可以直接包含其他组件并加以布局。Component,Container
和Panel类的方法被Applet类继承了下来。2.Applet生命周期如何编写一个Applet并令它在浏览器中执行呢?方法很简单,只要继承java.applet包下的Applet类,并实现一些必要的方法即可。Applet的加载、执行、卸载不同于一般的
Java应用程序,其内的主要成员函数分别
对应于Applet生命周期的不同阶段的活动。下载实例化init()初始化start()启动stop()暂停destroy()终止启动转入后台重新激活退出·
Applet的生命周期运行态离开web页面:极小化或装入其他页面,调用stop()方法停止态重新装入或改变页面大小或返回Web页面,调用start()方法关闭浏览器,调用destroy()方法消亡态初始态(瞬态)第一次装入,构造applet类,调用init()方法
调用start()方法3.Applet类中的主要成员方法Applet根据执行过程中发生的事件来定义其生命周期。对于每个事件将自动调用一种方法。方法如下:init():初始化方法它在Applet程序第一次被执行或重新再被执行时被调用1>执行时机:当Applet程序初始下载时浏览器首先执它2>特点:只被调用一次。3>用途:用户重定义出它,从而达到创建出其他对象、初始状态设置、图像加载及外观特征参数的改变等。start():开始函数1>执行时机:它是在Applet的init()函数调用之后被浏览器用;用户又切换回到本Applet页面;浏览器从图标状态恢复为窗口时被调用。2>特点:可能被多次执行(而且都是在页面可见时被调用)。3>用途:用户重定义出它,在其内创建并启动线程以实现特定的功能。stop():终止函数它与start()交替执行。1>执行时机:当用户退出浏览器时被浏览器调用;当用户离开Applet所在的页面;浏览器变为图标状态时。2>特点:可能被多次执行(而且都是在页面不可见时被调用)。3>用途:用户重定义出它,在其内终止线程以终止特定的功能。paint(Graphics
g):绘制图形函数它用于在浏览器的客户区(GUI)中显示出文本、图像等1>特点:可多次被调用,并且可由AWT的绘制处理线程自动调用。2>用途:用户重定义出它,以显示出Applet面板区域内各个组件及外观特征和显示出文本、图像、图形等。3>定义的形式:public
void
paint(Graphics
g){
//显示出Applet面板区域内各组件外观}调用Graphics类中的各种成员函数来实现绘制输出,用户也可调用repaint()、update()来间接地调用paint以实现立即显示外观属性的改变。destroy():消毁函数它在Applet结束时被调用,以允许Applet做最后清理任务(离线时释放本对象及其相关的资源)用途:由于stop()在destroy()之前被执行,用户一般不必覆盖它,而只需覆盖stop()即可。Applet的类层次及框架结构:import
java.awt.*;import
java.applet.*;public
class
AppletClassName
extends
Applet{public
void
init(){//初始化变量、装载图片、读取参数值等}public
void
start(){//启动程序执行或恢复程序执行}public
void
stop(){//挂起正在执行的程序,暂停程序的执行}public
void
destroy(){//终止程序的执行释放资源}public
void
paint(Graphics
g){//完成绘制图形等操作}}StringBuffer
buffer;public
void
init(){buffer
=
new
StringBuffer();addItem("initializing...
");}public
void
start(){addItem("starting...
");}public
void
stop(){addItem("stopping...
");}public
class
SimpleApplet
extends
Applpeutblic
void
destroy(){
{addItem("preparing
forunloading(destroy)...");}void
addItem(String
newWord){System.out.println(newWord);buffer.append(newWord);repaint();}public
void
paint(Graphics
g){g.drawRect(0,
0,
getSize().width
-getSize().height
-
1)g.drawString(buffer.toString(),
5}}SimpleApplet.java2、小应用程序的执行——Applet的运行控制除了Applet生命周期控制的方法外,Applet类还提供了一些其他有用的方法:public
AppletContext
getAppletContext()public
String
getAppletInfo():应该被重写public
URL
getDocumentBase()public
URL
getCodeBase()public
String
getParameter(String
name)public
String[][]getParameterInfo():应该被重public
void
showStatus(String
msg)1.html中的Applet标记<
APPLET[CODEBASE
=
codebaseURL]CODE
=
appletFile[ALT
=
alternateText][NAME
=
appletInstanceName]WIDTH
=
pixels
HEIGHT
=
pixels[ALIGN
=
alignment][VSPACE
=
pixels]
[HSPACE
=
pixels]>[<
PARAM
NAME
=
appletParameter1
VALUE
=
value
>][<
PARAM
NAME
=
appletParameter2
VALUE
=
value
>].
.
.[alternateHTML]</APPLET>9.3、Applet与html文件的配合CODEBASE
=
codebaseURL指明Applet类文件所在URL基址,在Applet类中,方法getCodeBase()可以获取该属性。如果这个属性没有指明,那么Applet类文件必须与包含它的HTML页面在同一个地方,方法getCodeBase()返回的值与getDocumentBase()相同。CODE
=
appletFile指明需要运行的Applet类文件(.class文件),该文件是与codebaseURL相关的。NAME
=
appletInstanceName给出了Applet类运行时的实例名,这使得同处于一个页面的不同Applet之间能够相互通信。方法getAppletContext()可以得到同一个方页面中其它Applet类。ALT
=
alternateText如果浏览器支持Applet但不能运行它,就显示alternateText中所给出的文字。否则就忽略它。WIDTH
=
pixels
HEIGHT
=
pixelsApplet在浏览器中所显示的高度和宽度(以象素为单位)。ALIGN
=
alignmentApplet在浏览器中显示时的对齐方式,其含义与效果与图片在HTML中的一样。其取值有:left,right,top,texttop,middle,absmiddlbaseline,bottom,absbottom。VSPACE
=
pixels
HSPACE
=
pixelsApplet在浏览器中显示时上下、左右要预留的高度和宽度,其含义与效果与图片在HTML中的一样。2、小应用程序的执行——Applet与HTML<
PARAM
NAME
=
appletParameter1
VALUE
=
value
><PARAM>属性可以使得Applet能够从页面中获取所需的参数。Applet可以用其方法getParameter()获取<PARAM>属性指定的参数。<PARAM>属性的作用与应用程序中main()方法里参数String
args[]的作用是一样的。一个好的小应用程序,应该提供用户能够设置外部参数的功能,以使得用户能够根据自己的需要来应用它。方法getParameterInfo()可以得到有关<PARAM>属性的说明信息。alternateHTML如果浏览器不支持Applet,就解释alternateHTML所给出的HTML代码。否则就忽略它。2、小应用程序的执行——Applet与HTMLpublic
class
AppletParaextends
Applet{String
s1,s2;public
void
init(){s1
=
getParameter("p1");
s2
=
getParameter("p2");}public
void
paint(Graphics
g){g.drawString(s1,10,10);g.drawString(s2,10,30);}}<HTML><HEAD><TITLE>Applet
Parameter
Test</TITLE></HEAD><applet
code=“AppletPara.class"width=300
height=300><param
name=p1
value="1111111"><param
name=p2
value="2222222"></applet></HTML>两个步骤:在Applet类中:s1
=
getParameter("p1");在页面中设置Applet参数:<param
name=p1
value="1111111">AppletPara.java2、Applet与HTML9.4
绘制用户自定义成分(图形、文本、图像绘制相关知识)有关的类及绘制函数:java.awt包中的
Graphics类;然后调用Graphics类中的相应的绘制图形、绘制文本、绘制图像等函数以输出图形、文本、图像。编程方法:先利用java.awt包中的Graphics类对象(它代表当前当前组件的绘图环境),然后调用
Graphics类中相应的绘制函数。绘制的时机:①外形发生变化时(如窗口的大小、位置、图标化等显示区域更新时),AWT自动从高层直到叶结点组件相应地调用各组件的paint()方法,但这可能有一个迟后感。②
程序员也可直接调用某一个组件的repaint()(系统再调用update()以清除背景区域,系统再
调用paint()实现输出;如直接调用paint()将保留上次的屏幕输出,故不直接调用paint()),以立即更新外观(如在添加新的显示内容后)。③AWT响应外部的事件时(如首先显示于屏幕或需刷新时),AWT也会直接调用repaint()函数。4.如何获取Graphics类对象并绘制:绘制之前,必须先获取Graphics类对象,因为它包含有当前组件的绘图环境,从而实现在图形窗口下输出。方法一:在paint()内则可通过其形参(它代表当前组件的绘图环境),从而调用Graphics类中的相关的绘制成员函数。public
void
paint(Graphics
g){ .drawString("Java
Text",x,y);}方法二:先在组件类(如Applet或窗框Frame的其他成员函数)中调用getGraphics()来获取当前组件的绘图环境,再强制绘制输出,从而可在paint()函数之外产生绘制动作)。public
void
myFun(){Graphics
g=getGraphics();
//获取当前组件的绘图环境g.drawString("Java
Text",x,y);//强制绘制输出}5.Graphics类中的图形函数(参见类库手册):drawLine(int
x1,
int
y1,
int
x2,
int
y2);drawArc(int
x,int
y,int
width,
int
height,
int
starint
arcAngle);实例:设计一个自由笔(铅笔)。public
void
mouseDrag(Event
evt,
int
x,
int
y){Graphics
g=getGraphics()
;g.setColor(Color.red)
;g.drawLine(x,
y,
x,
y
)
;}6.Java中文字串输出文本控制台方式下输出文字串:
System.out.print(“待输出的文字串”);图形窗口环境下输出文字串:应调用Graphics类中相应的输出函数:
g.drawString(“待输出的文字串”,x,
y);7.图形、文字的颜色Color:可以利用
Color类设置或获取某一容器组件内的图形、文字的颜色。编程方法:利用Color类创建出一Color类对象并设置颜色特性参数(三基色的分量);调用Graphics类中的setColor()将用户的颜色加入到系统中;再调用绘制函数输出图形、文字等。public
void
paint(Graphics
g){Color
myColor=
new
Color(red,
green,
blue);g.setColor(myColor);g.drawString(“这是Java中的带颜色的文字串”,100,100);g.drawRect(
10,10,100
,100)
;}要点:了解颜色的变化规律;Java
JDK中预定义了
13种常量颜色(如:Color.red、Color.green等)对Java的组件也可借助于
setBackground()/setForeground()、getBackground()/getForeground()来改变或获取组件的前景和背景色。8.图形文字的字体Font:可以利用Font类设置或获取某一容器组件内的文字字体。编程方法:利用Font类创建出一Font类对象并设置字体特性参数;调用Graphics类中的setFont()将用户字体加入到系统中;再调用绘制函数输出文字(也可以设置按钮等基本控件的字体OK.setFont())。public
void
paint(Graphics
g){Font
myFont=
new
Font(“Dialog”,
Font.BOLD,20);g.setFont(myFont);g.drawString(“这是Java中的Dialog字体的文字串”,100,100);}字体:TimesRoman
Helvetica
Courier
Dialog字体的尺寸FontMetrics:drawString()函数中的字符位置坐标x、y含义(字符串的左下角);获知字符或字符串的宽度(stringWidth()、charWidth())。获取文字字体的尺寸法:FontMetrics
fm=g.getFontMetrics();fm.getHeight();Java
Applet中声音编程:编程要点:先加载声音文件;再播放它。.au,
wav,midi,rmf编程方法:方法一:在Applet程序中直接调用play()函数。play(getDocumentBase(),“mySound.au”);但此方法的缺点是用户无法控制它。方法二:AudioClip
sound=getAudioClip(
getDocumentBase(),
“mySound
.
au”);sound.play();
//或sound.stop();讨论P309
8.8,补充题:1、编程:在APPLET中绘制图形,如:
“圆”、“椭圆”“矩形”,等图形以及字体、颜色设置。编程:在APPLET中播放声音文件、显示图像、动画演示。11. Java中图像编程:有关的包与类:在java.awt包、java.awt.image包、都有与图像有关的类Image。图像编程的要点:先加载图像(将它化为Image类对象);再跟踪图像的加载过程;最后显示出图像在Applet及Application程序中载入图像的方式。加载图像:①Java
Applet中加载图像:直接调用ImagemyImage=getImage(URL
address,imageFileName);②Java
Application中加载图像:利用Image
myImage=Toolkit.getDefaultToolkit.
getImage(imageFileName);加载图像。Image
myImage
=Toolkit
.getDefaultToolki()
.getImage(imageFileName);Toolkit
Tool;Tool=
Toolkit
.getDefaultToolkit();Image
myImage
=Tool.getImage(imageFileName);(3)显示出图像:调用Graphics类中的drawImage(Imageimage
,
int
x,
int
y
,
ImageObserverobserver)显示出图像,其中第四个参数可以为null(不跟踪图像载入时)或this(跟踪图像载入时,跟踪者为本程序)。9.5 Java中的动画编程:动画原理:画出一系列的图像帧,利用人眼的视觉暂停来造成运动的感觉。常见的动画效果及实现原理(利用线程达到循环显示输出):①运动效果:平动改变文字在显示时g.drawStrin的x,y坐标位置或g.drawImage()中的x,y坐标位置;规则运动如果x,y之间满足一定的数学规则。②变焦(由远到近文字由小到大;由近到远字由大到小):利用线程不断地改变文字的字体大小或图像的大小。③淡入淡出:利用线程不断地改变文字的颜色并将颜色按某种规则变化。动画的质量:除了图片本身的好坏外,动画中动作的平滑程度也是一大关键(每秒所播放的图像数较
多,动画中动作的平滑程度则较高,10~20帧/秒);动画的速度则可利用Java的线程来实现并用
threadObj.sleep()来延迟以控制动画的速度。动画的图像载入编程技巧:利用getImage()函数并用Image数组来存放各个Image对象,同时为利用一个for()循环来将图片全部载入,应而各个图像文件名也应有要求(一般可采用数字编码来命名文件名);注意只有在图像文件全部加载完毕以后再显示出,否则会断续显示,这可由MediaTracker类中的waitForAll()方法实现对图像载入过程的跟踪。动画的载体:文字或图像动画实例1:文字淡入淡出动画原理:利用new创建一个线程,用
drawString()在屏幕指定位置显示出文字,然后让线程休眠一段时间,再改变文字显示的
位置或颜色,最后再显示文字(其中包括边
界判断、重设坐标)。编程技巧:可利用Graphics类中的
clipRect()函数用于限定绘制范围,从而减少清屏的区域以避免图像闪烁。实例2:图像动画import
java.applet.Applet;import
java.awt.*;public
class
img1
extends
Appletm_Images;{Image[]int
sum=18;int
cur=0;String
strImage;public
void
init(){m_Images[]=new
Image[18];for
(int
i
=0;
i
<
sum;
i++){strImage
=
"images/img00"
+
((i
<
10)
?
"0"
:
"")
+
i
+
".gif";m_Images[i]
=
getImage(getDocumentBase(),
strImage);}}public
void
start(){cur=0;}public
void
paint(Graphics
g){g.drawImage(m_Images[cur],50,50,this);cur=++cur%sum;try{Thread.sleep(50);}catch(InterruptedException
e){showStatus(e.toString());}repaint();}}{public
String
s;public
void
init(){s
=
new
String(“HelloWorld!”);}public
void
paint(Graphics
g){g.drawString(s,25,25);}}Frame
f
=
new
Frame(“Applet-App”);AppletApp
app
=
new
AppletApp();f.add(app,“Center”);f.setSize(200,
200);f.setVisible(true);f.addWindowListener(
new
WindowAdapter(){public
void
windowClosing(WindowEvent
e){System.exit(0);}});app.init();app.start();}AppletApp.java2、小应用程序的执行——Applet与Application一个Java类文件可以既是一个Java
Applet,又是一个Java
Application,只不过在编写时稍微复杂一些而已,但它却既可以在浏览器中运行,又可以作为Application单独运行。public
static
void
main(Stringargs[]
)public
class
AppletApp
extends
Apple{t8.图形文字的字体Font:可以利用Font类设置或获取某一容器组件内的文字字体。编程方法:利用Font类创建出一Font类对象并设置字体特性参数;调用Graphics类中的setFont()将用户字体加入到系统中;再调用绘制函数输出文字(也可以设置按钮等基本控件的字体OK.setFont())。public
void
paint(Graphics
g){Font
myFont=
new
Font(“Dialog”,
Font.BOLD,20);g.setFont(myFont);g.drawString(“这是Java中的Dialog字体的文字串”,100,100);字体的尺寸FontMetrics:drawString()函数中的字符位置坐标x、y含义(字符串的左下角);获知字符或字符串的宽度(stringWidth()、
charWidth())。获取文字字体的尺寸方法:FontMetrics
fm=g.getFontMetrics();fm.getHeight();Java
Applet中声音编程:(1)编程要点:先加载声音文件;再播放它。
(2)编程方法:方法一:在Applet程序中直接调用play()函数。
play(getDocumentBase(),
“mySound
.au”);但此方法的缺点是用户无法控制它。方法二:
AudioClip
sound=getAudioClip(
getDocumentBase(),“mySound
.
au”);sound.play();
//或
sound.stop();Java
Applet浏览器是指可以运行包含Applet的HTML文
件的一切软件系统。HotJava、Netscape
Navigator以及Microsoft
Internet
Explorer等支持Java的网络浏览器都是Applet浏览器,Java
Applet都可以在其中运行。AppletViewer是一个Java应用程序,它可以使得用户无须使用网络浏览器而直接运行Java
Applet。但AppletViewer仅仅是一个Applet浏览器,HTML文件中的其他内容将不会
被显示出来。AppletViewer是从java.awt.Frame中继承而来。使用方法:AppletViewer<HTML
file
or
URL>2、小应用程序的执行——Java
Applet浏览器3、图形操作——paint()、update()和repaint()Applet本身是一个AWT组件,因此它也具有一般AWT
组件的图形绘制功能。Applet中有三个显示相关的方法:
paint()、update()和repaint()。Applet的显示更新是由一个AWT线程来控制完成的,它主要负责两种显示更新情况:第一是暴光,表示部分显示区域被遮盖、调整大小、最大最小化等,这种情况随时会发生,需要系统调用paint()方法;第二是程序需要重画显示区域,添加一些新的显示内容,需要程序调用repaint()方法。AWT
thread(waiting)update():clear
areacall
paint()paint()程序调用
repaint()Exposure:遮盖、调整大小、最大最小化等3、图形操作——paint()、update()和repaint()·
paint(Graphics
g
)方法Applet本身是一个容器,因此任何输出都必须用图形方法paint()。当小应用首次被装载,以及每次窗口放大、缩小、刷新时都要调用paint()方法。paint()是由AWT线程调用的,而不是由程序调用,当程序希望调用paint方法时,用repaint方法。paint()方法的参数是Graphics类的对象g,该对象不是由new产生的,而是由系统或其他方式直接将生好的Graphics对象当作方法的参数,再交给paint()方法。paint()方法必须被重写以绘制自己所需的内容。3、图形操作——paint()、update()和repaint()3、图形操作——paint()、update()和repaint()update()方法update()方法用于更新图形。它首先清除背景,然后设置前景,再调用paint()方法完成Applet中的具体绘图。一般不重写update()方法。repaint()方法repaint()方法主要用于重绘图形,它是通过调用update()法来实现图形重绘的。当组件外形发生变化时,系统自动调用repaint()方法。AWT线程要处理组件的绘图工作,并负责其输入事件,因此必须尽量缩短paint()方法和update()方法的长度,特别在paint()方法中,不要执行太消耗时间的操作。3、图形操作——Graphics、Font和Color类的使用在paint()方法中有一个Graphics类参数,它是画图的关键。它支持两种绘制:一是基本的绘图,包括画点、线、矩形、文字等;二是画图象。在
进行基本画图时,可以设定所需的颜色和字体等,这需要用到Font、FontMetrics和Color三个类。有关这几个类的使用以及相互关系,请大家课后自己学习。3、图形操作——Applet中的事件处理Applet本身是一个AWT组件,因此可以对其中所发生的事件进行处理,其处理与前面所讲的图形用户界面程序的设计是一样的。SimpleClick.java3、图形操作——添加其它AWT组件Applet是从java.awt.Panel继承而来,因此它本身也是一个容器,可以往其中添加其他的AWT组件,从而构造更复杂、更有用的Applet程序。往Applet中添加其他组件及其事件处理与前面所讲的图形用户界面程序的设计是一样的。ArcTest.java4、小应用程序的通信——同页Applet之间的通信嵌入同一页中的Applet之间可以通过java.applet包中提供的方法直接进行通信。首先,利用Applet类中的方法getAppletContext()得到当前运行页的上下文环境AppletContext对象:public
AppletContext
getAppletContext();通过AppletContext对象,就可以得到当前Applet运行环境的信息。接口AppletContext中定义了方法getApplets()可以得到当前页中的其他Applet对象。public
abstract
Applet
getApplets(String
name);public
abstract
Enumeration
getApplets();(Enumeration中提供了方法hasMoreElements()和nextElement()来获取其中的元素。)得到同页中的其他Applet对象后,就可以调用这些Applet的public方法,从而达到同页Applet之间通信的目的。4、小应用程序的通信——同页Applet之间的通信三个Applets:(AmongApplets.java)GetApplets:获取同页中其它Applets的信息。Sender:获取同页中的Applet“Receiver”,并通过其方法向它发送消息。Receiver:接收同页中Applet“Sender”的消息。<HTML><HEAD><TITLE>Communication
among
Appelt
in
same
page.</TITLE></HEAD><applet
code=Sender.class
width=450
height=200
name="I"m
Sender"><param
name="receiverName"
value="I"m
Receiver"></applet><p><applet
code=Receiver.class
width=450
height=35><param
name="name"
value="I"m
Receiver"></applet><p><applet
code=GetApplets.class
width=400
height=150></applet></HTML>4、小应用程序的通信——Applet和浏览器之间的通信Applet中提供了很多函数来与显示它的浏览器之间进行通信:public
URL
getCodeBase()public
URL
getDocumentBase()public
String
getParameter(String
name)public
void
showStatus(String
msg)publicAppletContext
getAppletContext()Applet可以用这四个方法从浏览器中获取信息或者向浏览器发送信息。public
String[][]
getParameterInfo()public
String
getAppletInfo()浏览器可以使用Applet的这两个方法来获取Applet的相关信息。4、小应用程序的通信——Applet和浏览器之间的通信public
AppletContext
getAppletContext()同一页面不同Applet之间的通信也是要通过这个方法来获得起运行环境的(AppletContext),再利用AppletContext提供的方法getApplet()来获取其它的Applet从而达到相互通信的目的。AppletContext中还提供了showDocument()方法来向浏览器发送请求,以显示一个URL页面:void
showDocument(
URL
url)void
showDocument(
URL
url,
String
target
)4、小应用程序的通信——Applet和浏览器之间的通信void
showDocument(
URL
url)指定的HTML页面将在Applet所在地浏览器窗口中显示。void
showDocument(
URL
url,
String
target
)在本方法中,可以指明显示HTML页面的窗口,target就是用来指明在浏览器窗口的,不同的取值指明了不同的窗口:“_self”:在Applet所在的窗口中显示HTML页面“_parent”: 在Applet所在的窗口的父窗口中显示HTML页面“_top”:在最前面的窗口中显示HTML页面“_blank”: 在新的窗口中显示HTML页面name: 在指定名称的窗口中显示HTML页面ShowDocument.java4、小应用程序的通信——Applet的网络通信在Applet中可以进行网络通信,但是由于安全性的限制,Applet只能和提供它的主机进行通信。通过类Applet的getCodeBase()方法获得提供它的主机的URL实例利用类URL的getHost()方法得到主机名利用类InetAddress的getByName()得到该主机的IP地址通过IP地址,就可以进行网络通信(TCP,UDP)URL
url
=
getCodeBase();String
host
=
url.getHost();Try{InetAddress
address
=
InetAddress.getByName(host);}catch(Exception
e){}Try{DatagramSocket
socket
=
new
DatagramSocket();DatagramPacket
packet
=
new
DatagramPacket(buf,
length,
address,
port);socket.send(packet);}catch(Exception
e){}小结小应用程序是在浏览器中运行的,每个小应用程序中必须有一个主类,冠以public,并且继承自java.applet。小应用程序包括生命周期的四个环节和paint()方法。根据程序要求,用户可以在主类中定义其它方法,或定义其它类。public
class
myapplet
extends
Applet{init()
{…}start()
{…}stop()
{…}destroy()
{…}paint(Graphics
g){…}myMethod(){…}}class
myclass1{…};class
myclass2{…};applet主类stop()自定义方法init()applet启动后第一个被执行,在此初始化start()init()后被执行,程序主要代码写在此paint()start()后被执行,写与绘制有关的代码浏览器变换页面时执行,可以省略、重写destroy()浏览器关闭时执行,可以省略重写不能自动被执行,可以由前三个方法调用。例如:
start(){
…
myMethod();
…}myClass1myMethod1myMethode2myClasse1
myclass
=new
myClass1();.m.yclass1.myMethod1();class
myClass1{int
v1;public
void
myMethod(int
num){v1=num;}}public
class
Demo
extends
Applet{public
void
init(){myclass1
test1=new
myClass1();test1.myMethod(20);myClass1
test2
=
newmyClass1();test2.myMethod(10);}}v1test2v12010Demo
Instancetest1内存小结设计一个Applet,应:使用getParameter()方法,以便用户能够自定义Applet的运行参数。重写getParameterInfo()方法,帮助用户得到外部参数的说明信息。重写getAppletInfo()方法,帮助用户得到有关Applet的说明信息。准备提交一个Applet之前,应:去掉(隐去)调试信息一定要在stop()方法中终止一些消耗资源的运行。思考什么是JavaApplet,它和Application的区别是什么?如何创建Java
Applet?Applet的生命周期及主要方法是什么?Applet的用途和用法是什么?9.6
GUI设计GUI界面:用户与程序之间交互的一个控制面板,其内包含有菜单,控件(或组件),容器,用户自定义成分并能响应用户的事件。Java中的GUI实现方式:采用AWT(Abstract
Window
Toolkit)(抽象窗口工具集),
AWT是Java开发工具包(JDK)的一部分,是Java基本类(JFC)的核心。AWT的作用是给用户提供基本的界面组件,如:窗口、按键、菜单等。此外,
AWT还提供事件处理结构,支持剪贴板、数据传输和图像操作。从而可使GUI适用于不同OS的环境。特点:(1)具体实现由目标平台下的OS来解释,从而导致Java
GUI在不同平台下会出现不同的运行效果(窗口外观、字体显示效果会发生变化);(2)组件在设计时不应采用绝对定位,而应采用布局管理器来实现相对定位,以达到与平台及设备无关;(3)AWT组件及事件响应不及微软的SDK丰富(因为有些OS平台无微软的Windows组件),这个目标并没有很好的实现。这种情况从Java
1.1以后得到了大的改进。Sun从Java
1.2开始,AWT添加了被称为“Swing”的新GUI库。Swing是基于AWT基本结构创建的二级
用户界面工具集。与旧的AWT相比,Swing提供更加丰富的组件集,Swing组件存放在
javax.swing包中。几乎所有AWT组件对应有新功能更强的Swing组件。另外还加入了一些全新的组件。Swing组件在名称上前面多了一个字母“J”。Swing中所提供的组件集几乎可以替代所有AWT中原有的组件。由此,许多人也
许会产生Swing是AWT的替代物的误解,
而实际上Swing是基于AWT之上创建的。
因此,为了准确的掌握Swing组件集的工作方式,必须首先掌握AWT组件的行为及其
工作原理。9.6.2
Java
AWT中组件与容器基本组件它不能独立地显示出来并且在其内不能再包含其它的组件(如按钮、单选组件等)。容器组件:包含其它基本组件或子容器的组件,并由布局管理器统一决定其内的各个组件的摆放位置和大小(Frame窗框、Dialog对话框、Panel面板、FileDialog文件对话框等)。①
Panel和
Applet是无边框的容器组件②ScrollPanel是具有边框且能处理动的容器组件③Window、Frame、Dialog等都是有边框的容器组件并且可以移动、放大、缩小、关闭等。菜单条式菜单组件:MenuBar菜单条组件、Menu级联菜单组件、MenuItem菜单项组件、CheckboxMenu选择性菜单组件。弹出式菜单组件:,Popupmenu(可以右击或触发其它组件弹出它)。窗
口
类AWT提供了三个在屏幕上显示窗口的组件:Window、Frame和Dialog。这三个组件都用于显示窗口,而且相互之间的区别也不明显,因此有时候很难确定到底使用哪个组件更好。为了帮助大家区分它们的不同用法,表8.3列出了各组件的属性特征。表9.1
Window、Frame与Dialog组件的属性属性模式化Window不是Frame不是Dialog不是(可设置)可调大小不可可可标题栏无有有边界无有有标题无有有菜单栏无有无焦点管理器有有有警告字符串有有有图表无有无定位到框架可不可可java.awt包简介AWT在java.awt包中提供,表8.1列出了
AWT中的Java软件包。AWT包含四个主要的类:组件类
(Component)、容器类(Container)、图形类
(Graphics)和布局管理器类(LayoutManager和LayoutManager2)。Component(组件)类——菜单、按键、列表等组件的抽象基本类。5.AWT组件类层次组件是构成AWT的基础。 AWT中包括大量的组件,其中大约有一半的类由java.awt.Component类扩展而来,所以,
Component和它所支持的类是AWT的基础。java.awt.Component类是一个抽象类,它为其派生类提供了许多功能。例如,一个组件可以有以下成员:图形对象、位置、尺寸、父容器、前景和背景色、最小/最大和首选尺寸等。图9.1表9.2
Container的子类子类Applet说
明Panel.Applet的扩展,使所有Applet的超类Dialog对话框(可模式化或非模式化Window的扩展)FieldDialog用于选择文件的对话框FrameWindow的扩展,应用程序的容器,可以有菜单和标题栏PanelContainer的扩展,简单的容器ScrollPane滚动组件WindowContainer的扩展,没有菜单或边界,是Frame和Dialog的超类Java
AWT中的各组件的设计方法:1、基本组件的创建:在init()(对Java
Applet而言)或Frame的构造函数内(对Java
Application而言)创建出各个组件对象并初始化其外观、状态等属性;调用容器的add()分别将创建出的各个组件加入到Applet或Frame所在的容器中;然
后注册其事件监听器对象。ButtonDemo.java,CheckboxDemo.java例:
ButtonDemo.javaimport
java.awt.*;
import
java.awt.event.*;public
class
ButtonDemo
extends
Frame
implements
ActionListener{Button
button;public
static
void
main(String[]
args){ButtonDemo
frame
=
new
ButtonDemo();}public
ButtonDemo(){ button
=
new
Button("First");button.addActionListener(this);
add(button);setTitle("Button");setSize(130,
100);setVisible(true);}public
void
actionPerformed(ActionEvent
evt){String
arg
=
evt.getActioncommand();2、容器组件的创建:在init()或Frame的构造函数中内,首先创建出容器组件对象并实例化它,设置布局方式;分别创建出在容器内待包含的各个基本组件并实例化它们;调用容器内的add()函数将各个基本组件加入到容器内;再调用add()将各个子容器加入到Applet中或Frame的主窗框中;然后注册各个基本组件和容器的事件监听器对象;对Frame容器则需要调用setVisible(true)9.6.3窗口(Window)java.awt.Window是三个窗口组件中最基本的组件,它实际上是Frame与Dialog组件的超类。窗口组件没有边界、标题栏与菜单栏,而且大小不可以调整。其次,如果用户在程序设计过程中,需要利用悬浮在其他组件上方的无边界矩形框显示信息,则窗口是最佳选择。常用窗口实现的界面包括:产品信息的封面(如Outlook等软件启动时,显示在屏幕中间且几秒后自动消失的封面窗口),提示帮助信息(如使用金山词霸等软件时,移动鼠标到某个英文单词上时自动弹出的解释信息)等。下面我们通过一个例子来学习如何使用窗口类:例9.2
FrameDemo.javaimport
java.awt.*;public
class
SplashDemo
extends
Frame{ Window
window;static
public
void
main(String[]
args){SplashDemo
frame
=
newSplashDemo();
}public
SplashDemo(){ window
=
new
Window(this);Dimension
scmSize
=Toolkit.getDefaultToolkit().getScreenSi);int
width
=
300;int
height
=
200;window.setLocation(scmSize.width/2-(width/2),scmSize.height/2-(height/2));window.setSize(width,
height);window.show();window.toFront();try
{
Thread.currentThread().sleep(3000catch
(Exception
e)
{e.printStackTrace();}window.dispose();System.exit(0);
}}这是个使用Window的窗口在屏幕上显示一个矩形窗口类的实例,这个窗口没有边界、标题栏与菜单栏,在屏幕上停留3秒后自动消失。如果在窗口中加载一幅图片,则能实现一个类似Outlook的封面窗口程序中用到了工具类的方法
Toolkit.getDefaultToolkit().getScreenSize()。Toolkit类是一个包含许多有用的本地工具方法的类。getScreenSize()方法的作用是取得显示器的像素尺寸。程序的运行结果如图9.2所示。图9.29.6.4框架(Frame)java.awt.Frame是Window的一个子类,它是带有标题栏和边界的窗口,而且允许调整大小。另外,用户还可以为框架附加一个菜单栏。用户在程序设计过程中,当程序窗口需要图表化或者需要包含菜单栏时,则可以选择使用框架组件。构造一个框架后,可以用add()方法来给框架添加组件。框架的缺省布局管理器属性是BorderLayout。可以用setLayout()方式来改变布局管理器属性。框架类中的Frame(String)构造方法创建一个由String规定标题的新的不可见的框架对象。例9.2
FrameDemo.javaimport
java.awt.*;public
class
FrameDemo
extends
Frame{public
FrameDemo(String
title){super(title);}public
static
void
main(String
agrs[])FrameDemo
frame=newFrameDemo("Demo
Frame");{frame.setLocation(100,
100);frame.setSize(500,
200);frame.setVisible(true);
}}程序的运行结果如图8.3所示,它是一个具有标题、大小及背景颜色的框架。图9.39.6.5对话框(Dialog)java.awt.Dialog也是Window的扩展类。与框架相同的是,对话框也拥有边界与标题栏,而且也可以调整大小;而与框架不同的是,对话框不支持附加菜单栏,而且对话框可以模式化属性设置,这是窗口和框架都不允许的。因此,如果用户在程序设计过程中需要创建一个临时窗口与用户交换信息时,使用模式对话框是最方便的。另外,AWT中还提供了Dialog类的一个常用的扩展类——FileDialog(文件对话框)。它可以为用户选择一个待打开或保存的文件。可以说对话框是介于窗口和框架之间的,对话框和框架相比各有特色。我们来看一个典型的对话框的例子。例9.3
DialogDemo.javaimport
java.awt.*;public
class
DialogDemo{public
static
void
main(String
agrs[]){ Frame
frame
=
new
Frame();Dialog
dialog
=
new
Dialog(frame,
"DemoDialog",
false);dialog.setLocation(100,
100);dialog.setSize(500,
100);dialog.setVisible(true);
}}程序运行结果如图9.4所示。图9.4文件对话框是文件选择设备的一个实现。它有自己的自由窗口以及窗口元素,并且允许用户浏览文件系统,以及为以后的操作选择一个特定的文件。例如:例9.4
FileDialogDemo.javaimport
java.awt.*;public
class
FileDialogDemo{ public
static
void
main(String[]
a{ Frame
parentFrame
=
new
Frame();FileDialog
d
=
new
FileDialog(parentFrame,"FileDialog");d.setVisible(true);//
block
here
until
OK
selectedString
fname
=
d.getFile();
}}程序的运行结果如图9.5所示。图9.5通常情况下,并不需要处理
FileDialog的事件。上例中,调用
setVisible(true)将阻塞事件,直至用户选择OK,这时,对话框会请求用户选择文件名,这个信息将作为一个String类型返回。程序的运行结果如图9.6所示。该例为Button注册了一个监听器。任何实现了被注册为监听者的ActionListener接口的类,它的actionPerformed()方法将在一个按钮被鼠标点击“按下”时被调用。按钮被按下时调用的
getActioncommand()方法在缺省情况下将返回触发组件的标签字符串(此处为按键的标签)。我们还可以通过
setActioncommand()方法改变动作命令和标签。复选框(Checkbox)Checkbox组件提供一种简单的“开/关”输入设备,它旁边有一个文本标签。应用方式如下:例:CheckboxDemo.javaimport
java.awt.*;import
java.awt.event.*;public
class
CheckboxDemo
extends
Frameimplements
ItemListener{public
static
void
main(String[]
args){CheckboxDemo
frame
=
new
CheckboxDemo();
}public
CheckboxDemo(){ setTitle("Checkbox
Test");setSize(300,
100);setLayout(new
FlowLayout());Checkbox
one
=
new
Checkbox("One",
true);Checkbox
two
=
new
Checkbox("Two",
false);Checkbox
three
=
new
Checkbox("Three",
true);one.addItemListener(this);two.addItemListener(this);three.addItemListener(this);add(one);add(two);add(three);setVisible(true);}public
void
itemStateChanged(ItemEvent
evt){
String
state
=
"deselected";if
(evt.getStateChange()
==ItemEvent.SELECTED)state
=
"selected";System.out.println(evt.getItem()+""+state)}}程序运行结果如图9.7所示。图9.7选取或不选取(取消)一个复选框的事件将被送往ItemListener接口。所传递的ItemEvent包含
getStateChange()方法,它根据实际情况返回
ItemEvent.DESELECTED或ItemEvent.SELECTED。getItem()方法将受到影响的复选框作为一个表示这个复选框标签的String对象返回。程序中用到了一个布局管理器FlowLayout。
前面我们已经提到了布局管理器的作用,此处为
Frame添加FlowLayout的作用是让包含在其中的组
件顺次排列。关于布局管理器的使用方法在9.5节中还将详细讨论。复选框组—单选框(Checkbox
Group-Radio
Button)复选框组提供了将多个复选框作为一个互斥的集合的方法,因此在任何时
刻,这个集合中只有一个复选框的值是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【复习大串讲】【中职专用】高二语文上学期期末应用文写作专题(职业模块)(原卷版)
- 分租店面装修合同范本
- 农机课题申报书怎么写
- 专用预埋件销售合同范本
- 友谊合同范本
- 产业用工合同范本
- 前期物业托管合同范本
- 丰沃达采购合同范本
- 农场民宿到超市合同范本
- 医院物业服务合同范本格式
- 2024煤矿安全规程解读
- 上海2025年上海市发展改革研究院招聘9人笔试历年参考题库附带答案详解
- 德州环锂新能源科技有限公司2万吨年废旧锂电池回收项目环境影响报告书
- 2025年江苏省中职《英语》学业水平考试核心考点试题库500题(重点)
- 延期实习申请书
- 2024-2025学年一年级语文下册第一单元测试(含答案)
- 2025年江苏信息职业技术学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 易制毒化学品理论考试试题及答案
- 2024年烟台汽车工程职业学院高职单招职业适应性测试历年参考题库含答案解析
- 2024年江西旅游商贸职业学院高职单招语文历年参考题库含答案解析
- 2025年春新人教PEP版英语三年级下册课件 Unit 1 Part C 第8课时 Reading time
评论
0/150
提交评论