บทท ่ี8it.nrru.ac.th/krit/410303/Chap08.pdf · 2016-02-17 ·...

Preview:

Citation preview

8บทท 8

โปรแกรมจาวาแอปเพลต

(Java Applet)

วตถประสงค

แนะนาการเขยนโปรแกรมจาวาแอปเพลต

แนะนาตวอยางไฟล HTML ทม tag <APPLET> เพอเรยกใชโปรแกรมจาวา แนะนาตวอยางไฟล HTML ทม tag <APPLET> เพอเรยกใชโปรแกรมจาวา แอปเพลต

แนะนาคลาส Applet และเมธอดทสาคญของคลาสแนะนาคลาส Applet และเมธอดทสาคญของคลาส

แนะนาคลาส Graphics และเมธอดสาคญๆทเกยวของกบคลาส

แนะนาวธการเขยนโปรแกรมจาวาแอปเพลตเพอจดการกบไฟลภาพและไฟลเสยง

แนะนาการเขยนโปรแกรมจาวาแอปเพลตทมสวนตดตอกบผใช

โ โปรแกรมจาวาแอปเพลต

โปรแกรมจาวาแอปเพลต (Applet) คอโปรแกรมภาษาจาวาทสามารถทางานภายใตโปรแกรมเวบบราวเซอร (Web Browser) ทม JVM อย

โปรแกรมจาวาแอปเพลตจะประกอบดวยไฟลโปรแกรมสองไฟลคอ• โปรแกรมภาษาจาวา (.java)• โปรแกรมภาษา HTML (.html)

โปรแกรมจาวาแอปเพลตจะแตกตางจากโปรแกรมจาวาประยกตตรงทไมมเมธอดทชอ main() และจะไมสามารถทางานตามลาพงได แตจะตองเรยกใชโดยผานโปรแกรมภาษา HTML

โ ตวอยางโปรแกรมจาวาแอปเพลต

import java.awt.*;

import java.applet.*;

public class HelloWorldApplet extends Applet {

public void paint(Graphics g) {p p p g

g.drawString("Hello World",20,20);

}

}}

โโปรแกรมภาษา HTML

โปรแกรมภาษา HTML จะม tag ทชอ <APPLET> เพอใชในการระบโปรแกรมไบทโคดทไดมาจากการคอมไพลโปรแกรมจาวาแอปเพลตซง

ใ โ ไ โ ภายใน tag นจะมคณลกษณะ (attribute) ตางๆคอ ชอของโปรแกรมไบทโคด (.class) และขนาดของโปรแกรมแอปเพลตทตองการจะแสดงบนเวบเพจ

โตวอยางโปรแกรมภาษา HTML

<HTML>

<HEAD>

/<TITLE>HelloWorld Example</TITLE>

</HEAD>

<BODY>

<APPLET CODE="HelloWorldApplet.class"

WIDTH="300" HEIGHT="300"></APPLET></APPLET>

</BODY>

</HTML>

โ ขนตอนการพฒนาโปรแกรมจาวาแอปเพลต

เขยนโปรแกรมซอรดโคด (HelloWorldApplet.java) และโปรแกรม เวบเพจ (HelloWorld.html) โดยใชโปรแกรมอดเตอรใดๆ

คอมไพลโปรแกรม HelloWorldApplet.java โดยใชคอมไพเลอรดงน

ja ac HelloWorldApplet ja ajavac HelloWorldApplet.java

ตวอยางนจะไดโปรแกรมไบทโคดทชอ HelloWorldApplet.class

ใชโปรแกรมเวบบราวเซอรใดๆเชน Internet Explorer หรอ Netscape เปดโปรแกรมเวบเพจทชอ HelloWorld.html ซงจะเรยกโปรแกรมไบทโคด ทชอ HelloWorldApplet.class โดยอตโนมต

โ ตวอยางการรนโปรแกรมบนเวบบราวเซอร

ขนตอนการทางาน

การรนโปรแกรมจาวาแอปเพลตภายในโปรแกรมเวบบราวเซอร จะมขนตอนการทางานดงน

โ โ • โปรแกรมเวบบราวเซอรจะโหลด URL ตามตาแหนงทระบ• โปรแกรมเวบบราวเซอรจะโหลดไฟล HTML ทระบและกระทาคาสง tag ตางๆทระบในไฟล HTMLในไฟล HTML

• โปรแกรมเวบบราวเซอรจะโหลดโปรแกรมโปรแกรมไบทโคด ทเปนโปรแกรม จาวาแอปเพลตทระบใน tag ทชอ APPLET ตาม URL ทระบโป โป ป • โปรแกรมเวบบราวเซอรจะรนโปรแกรมจาวาแอปเพลต

รปแสดงขนตอนการทางาน

ใ ใ โ ความปลอดภยในการใชโปรแกรมจาวาแอปเพลต

โปรแกรมเวบบราวเซอรทรนโปรแกรมจาวาแอปเพลตจะตองม JVM อยและเนองจากโปรแกรมเวบบราวเซอรสามารถโหลดโปรแกรมจาวาแอปเพลต

ไ ไ มาจากเครองคอมพวเตอรแมขายอนๆได ดงนนภาษาจาวาจงไดกาหนดระบบความปลอดภยในการรนโปรแกรมจาวาแอปเพลต เพอปองกนไมใหโป ป โปรแกรมจาวาแอปเพลตทางานตางๆดงน• อานหรอเขยนไฟลอนๆทอยในเครองทรนโปรแกรมอย• เรยกใชโปรแกรมอนๆทอยในเครองทรนโปรแกรมอยๆ • ตดตอกบเครองแมขายอน• เรยกใช native method (คาสงเรยกเมธอดในโปรแกรมภาษาอน)

กรณทโปรแกรมภาษาจาวาแอปเพลตพยายามเรยกใชคาสงทโปรแกรมเวบบราวเซอรไมอนญาตใหทาเหลาน โปรแกรมจะสงขอผดพลาดทชอ SecurityException กลบมา

Tag ทชอ <APPLET>

Tag ทชอ APPLET มรปแบบดงน

<APPLET code = filename.class width = widthPixels

height = heigthPixels [archive = archivefile]

[codeapplet = url] [vspace = vMargin]

[hspace = hMargin] [align = alignment]

[alt = text]>

[<PARAM name = attrl value = val1>

<PARAM name = attrN value = valN>]

</APPLET></APPLET>

Tag ทชอ <APPLET>

tag ทชอ <APPLET> จะมคณลกษณะทตองระบสามอยางคอ• code เพอระบชอโปรแกรมไบทโคดของโปรแกรมจาวาแอปเพลต

โป ป • width เพอระบความกวางของโปรแกรมแอปเพลตทตองแสดงบนเวบเพจ• height เพอระบความสงของโปรแกรมแอปเพลตทตองการแสดงบนเวบเพจ

ป ไ นอกจากนยงมคณลกษณะอนๆทเปนเงอนไขเพมเตมดงน• ALIGN เพอกาหนดการวางตาแหนงของโปรแกรมจาวาแอปเพลต• CODEBASE เพอระบตาแหนงของ URL ทเกบโปรแกรมไบทโคดของโปรแกรมจาวาแอปเพลต

• ARCHIVE เพอระบคลาสหรอไฟลแบบ JAR ทตองการใหโหลดขนมาไวALT เพอระบขอความทตองการใหเวบเพจแสดงในกรณทไมสามารถโหลดโปรแกรม• ALT เพอระบขอความทตองการใหเวบเพจแสดงในกรณทไมสามารถโหลดโปรแกรมไบทโคดได

• VSPACE คอระยะหางทางแนวตงของโปรแกรมจาวาแอปเพลต• HSPACE คอระยะหางทางแนวนอนของโปรแกรมจาวาแอปเพลต

การสงพารามเตอร

คณลกษณะทชอ PARAM จะใชในการสงผานพารามเตอรไปยงโปรแกรม จาวาแอปเพลตได

รปแบบของคณลกษณะทชอ PARAM <PARAM name = attr1 VALUE = val1>

ตวอยาง<PARAM name = speed VALUE = "25">

โปรแกรมจาวาแอปเพลตสามารถเรยกดคาพารามเตอร ทจะสงผานมาจากโปรแกรม .html โดยใชคณลกษณะใน tag ทชอ APPLET นได โดยใชเมธอด ทชอ getParameter()

การสงพารามเตอร

รปแบบของเมธอด getParameter()String getParameter(String paramName)

เมธอดนจะสงคาเปนชนดขอมลแบบ String คนมาโดยจะเปนคาทอยใน <PARAM> ทชอ VALUE คาทสงกลบมาจะเปน case-sensitive แตชอ

ไ ใ พารามเตอรจะไมใช case-sensitive

ตวอยางgetParameter(“SPEED”)

จะใหคากลบมาเปน “25” ตามทระบไวในตวอยางของ <PARAM> ขางตน

ไ ไปใ ไ กรณทไมพบพารามเตอรตามชอทสงไปใน getParameter()เราจะไดคาทกลบมาเปน null

คลาส Applet

Applet เปนคลาสทกาหนดไวใน Java API ทอยในแพคเกจ java.applet โปรแกรมจาวาแอปเพลตทกโปรแกรมจะตองสบทอดมาจากคลาส Appletโปรแกรมจาวาแอปเพลตทกโปรแกรมจะตองสบทอดมาจากคลาส Applet

โดยใชคาสง extends Applet

คลาส Applet จดเปนคลาสประเภท Container ทสบทอดมาจากคลาสทคลาส Applet จดเปนคลาสประเภท Container ทสบทอดมาจากคลาสทชอ Panel โดยมการจดวางผงเปนแบบ FlowLayout

ใ ป ป ป ฟฟคลาส Applet จงสามารถทจะใสออปเจคทเปนสวนประกอบกราฟฟกของแพคเกจ AWT ได

ในกรณทตองการใชสวนประกอบกราฟฟกของแพคเกจ javax.swing

โปรแกรมจาวาแอปเพลตจะตองสบทอดมาจากคลาสทชอ JApplet

เมธอดทสาคญของคลาส Applet

โปรแกรมจาวาแอปเพลตจะไมมเมธอดทชอ main()

เมธอดทสาคญของคลาส Applet มดงนเมธอดทสาคญของคลาส Applet มดงน• init()• start()• stop()p()• destroy() • paint()

รายละเอยดของเมธอด

init()• เมธอดนจะถกเรยกเพยงครงเดยวเมอมการโหลดโปรแกรมจาวาแอปเพลต หรอเมอมการรโหลด (reload) โปรแกรมเวบบราวเซอรมการรโหลด (reload) โปรแกรมเวบบราวเซอร

start()• เมธอดนจะถกเรยกหลงจากทาคาสงในเมธอดทชอ init() และถกเรยกใชทกครง

ทผใชกลบมายงเวบเพจทมโปรแกรมจาวาแอปเพลตหนานอย หรอทกครงทมการแสดงเฟรมทมโปรแกรมจาวาแอปเพลตหนานอย

t () stop()• เมธอดนจะถกเรยกใชเมอผใชยายไปยงเวบเพจหนาอน หรอเมอมการยกเลกการแสดงเฟรมทมโปรแกรมจาวาแอปเพลตหนานอย

destroy()• เมธอดนจะถกเรยกครงเดยวเมอมการปดเวบบราวเซอร

เมธอด paint()

เปนเมธอดทมคาสงทเกยวของกบการวาดรปกราฟฟกตางๆ

เมธอด paint() มรปแบบดงนเมธอด paint() มรปแบบดงน

public void paint(Graphics g) {

[statements]

}

ใ ใ ใคาสงในเมธอด paint() จะถกเรยกใชงานหลงจากการทาคาสงในเมธอด start() ทาใหสามารถทจะเขยนรปทรงหรอขอความทเปนกราฟฟกได

เมธอด paint() จะถกเรยกซาทกครงทเวบบราวเซอรมการเปลยนแปลงเชน การปรบขนาดหรอมการเคลอนท

ขนตอนการทางานของเมธอด

คลาส Graphics

การสรางภาพกราฟฟกในโปรแกรมจาวาแอปเพลตจะทาไดโดยการ override เมธอด paint()แลวเขยนคาสงในการวาดรปทรงกราฟฟกตางๆในเมธอด

เมธอดในการวาดรปทรงตางๆ• drawLine()d R t() fillR t()• drawRect(), fillRect()

• drawRoundRect(), fillRoundRect()• drawOval(), fillOval()• drawArc(), fillArc()drawArc(), fillArc()• drawPolygon(), fillPolygon()• drawPolyline()• drawString()

เมธอดทใชในการจดการคณลกษณะของกราฟฟก• setColor()• setFont()• setFont()

โตวอยางโปรแกรม

import java.awt.*;

import java.applet.*;

public class GUIApplet extends Applet {

public void paint(Graphics g) {

g drawRect(5 5 15 15);g.drawRect(5,5,15,15);

g.fillOval(50,50,20,20);

g.drawArc(75,25,40,40,0,135);

g.fillArc(80,80,30,30,90,270);

g.drawString("Hello",5,90);

}

}

ผลลพธทไดจากการรนโปรแกรมผลลพธทไดจากการรนโปรแกรม

โโปรแกรม AWTThread

โปรแกรม GUI จะมโปรแกรมแบบเธรดทเรยกวา AWTThread ทเปนโปรแกรมทประมวลผลพรอมกน ซงจะทาหนาทคอยตรวจสอบวาจะตองม

ใ ใ การเรยกใชเมธอด paint() เพอวาดรปทรงกราฟฟกตามคาสงทระบใหแสดงบนออปเจคประเภท Container (เชน Applet) ใหมหรอไม

โปรแกรม AWTThread จะเรยกใชเมธอด paint() ใหมในกรณตางๆอาทเชน

โ • เมอมการโหลดออปเจคของคลาสประเภท Container เพอแสดงผลครงแรก• เมอโปรแกรมเปลยนจากไอคอนกลบมาเปนโปรแกรมทแสดงผลตามหนาจอปกต• เมอโปรแกรมเวบบราวเซอร กลบมาแสดงเวบเพจหนาทมโปรแกรมจาวาแอปเพลต เมอโปรแกรมเวบบราวเซอร กลบมาแสดงเวบเพจหนาทมโปรแกรมจาวาแอปเพลต อย

เมธอด repaint()

โปรแกรม AWTThread จะเรยกใชเมธอด repaint() เมอตองการวาดรปทรงกราฟฟกใหม ซงเมธอด repaint() จะเรยกใชเมธอด update()

อกตอหนง

โดยทวไปเมธอด update() จะมคาสงในการลบภาพกราฟฟกเดมและเรยกใชเมธอดทชอ paint() โดยมรปแบบดงน

public void update(Graphics g) {public void update(Graphics g) {

g.clearRect(0,0,width,height);

paint(g);paint(g);

}

เมธอด update()

เราสามารถทจะ override เมธอดทชอ update() ใหมเพอไมใหมการลบภาพกราฟฟกเดมไดโดยกาหนดรปแบบคาสงดงน

public void update(Graphics g){

paint(g);paint(g);

}

ใ โการเรยกใชเมธอดตางๆของโปรแกรม AWTThread

คาสงดาน Multimedia

โปรแกรมจาวาแอปเพลตสามารถทจะแสดงรปภาพทอยฟอรแมตตางๆเชน GIF หรอ JPEG ได และสามารถทจะเลนไฟลเสยงไดโดยมคลาสทสาคญสองคลาสคอ• คลาส Image ซงเปนคลาสทใชในการสรางออปเจคเพอจดการกบไฟลรปภาพ• คลาส AudioClip ซงเปนคลาสทใชในการสรางออปเจคเพอจดการกบไฟลเสยง• คลาส AudioClip ซงเปนคลาสทใชในการสรางออปเจคเพอจดการกบไฟลเสยง

คลาส Image

โปรแกรมจาวาแอปเพลตสามารถสรางออปเจคของคลาส Image ไดโดยเรยกใชเมธอด getImage() ทอยในคลาสทชอ Applet ซงมรปแบบดงน

• Image getImage(URL u)• Image getImage(URL u,String name)

URL เปนคลาสทใชสรางออปเจคเพอระบตาแหนง URL ของรปภาพอาทเชน URL เปนคลาสทใชสรางออปเจคเพอระบตาแหนง URL ของรปภาพอาทเชน• URL u = new URL(“http://java.sun.com”);

กรณทตาแหนงของไฟลรปภาพอยใน URL เดยวกบตาแหนงของโปรแกรมเวบกรณทตาแหนงของไฟลรปภาพอยใน URL เดยวกบตาแหนงของโปรแกรมเวบเพจ เราสามารถเรยกใชเมธอดทชอ getDocumentBase()เพอระบ URLดงกลาว อาทเชน

• Image cat = getImage(getDocumentBase(),“cat.gif”);

คลาส Image

สวนในกรณทตาแหนงของไฟลรปภาพม URL ตรงกบตาแหนงของโปรแกรมไบทโคดของโปรแกรมจาวาแอปเพลต เราสามารถเรยกใชเมธอดทชอ

getCodeBase() เพอระบ URL ดงกลาวอาทเชน• Image cat = getImage(getCodeBase(),“cat.gif”);

ใ ใ ใ ป เมธอด drawImage()ในคลาส Graphics ใชในการแสดงรปภาพทตาแหนง x, y ดงน

• drawImage(Image im,int x,int y,ImageObserver ob);drawImage(Image im,int x,int y,ImageObserver ob);

ImageObserver เปนอนเตอรเฟสทใชระบเมอมการเปลยนสถานะของรปภาพ

โตวอยางโปรแกรม

import java.awt.*;

import java.applet.*;

public class ImageDemo extends Applet{

Image im;

public void init() {public void init() {

im = getImage(getDocumentBase(), "duke.gif");

}}

public void paint(Graphics g){

g.drawImage(im, 20, 20, this);

}

}

คลาส AudioClip

โปรแกรมจาวาแอปเพลตสามารถสรางออปเจคของคลาส AudioClip ไดโดยใชเมธอด getAudioClip()ซงมรปแบบดงน

• AudioClip getAudioClip(URL u)• AudioClip getAudioClip(URL u,String name)

คลาส AudioClip มเมธอดทเกยวของกบการเลนเสยงดงนคลาส AudioClip มเมธอดทเกยวของกบการเลนเสยงดงน• play()• loop()• stop() stop()

นอกจากนคลาส Applet ยงมเมธอด play() ทสนบสนนการเลนไฟลเสยง โดยไมจาเปนตองสรางออปเจคของคลาส AudioClip โดยมรปแบบเสยง โดยไมจาเปนตองสรางออปเจคของคลาส AudioClip โดยมรปแบบดงน

• play(URL u)l (URL St i g m )• play(URL u,String name)

โตวอยางโปรแกรม

i t j t *import java.awt.*;

import java.applet.*;

public class MusicDemo extends Applet {

AudioClip sound;

public void init() {p () {

sound = getAudioClip(getDocumentBase(),

"spacemusic.au");

}

public void paint(Graphics g){

sound.loop();p();

}

public void stop() {

sound stop();

}

sound.stop();

}

}

โ โโปรแกรมจาวาแอปเพลตทโตตอบกบผใช

คลาส Applet เปนคลาสประเภท Container และสามารถทจะรบฟงเหตการณทางกราฟฟกตางๆได อาทเชน

• ActionListener• MouseListener• MouseMotionListener• KeyListener• KeyListener• FocusListener

โ ใ ตวอยางโปรแกรมจาวาแอปเพลตทมสวนตดตอกบผใช

import java.awt.*;

import java.awt.event.*;

import java.applet.*;p j pp

public class MusicGUI extends Applet implements ActionListener {

AudioClip sound;

Button bn1 bn2; public void init() {Button bn1, bn2; public void init() {

sound = getAudioClip(getDocumentBase(), "spacemusic.au");

bn1 = new Button("PLAY");bn1 = new Button( PLAY );

bn2 = new Button("STOP");

add(bn1);

add(bn2);

โ ใ ตวอยางโปรแกรมจาวาแอปเพลตทมสวนตดตอกบผใช

bn1.addActionListener(this);

bn2.addActionListener(this);

bn1.setEnabled(true);

bn2.setEnabled(false);

}

public void stop() {

sound stop();sound.stop();

}

public void actionPerformed(ActionEvent ev) {

String cmd = ev.getActionCommand();

โ ใ ตวอยางโปรแกรมจาวาแอปเพลตทมสวนตดตอกบผใช

if (cmd.equals("PLAY")) {

sound.loop();

bn2 setEnabled(true);bn2.setEnabled(true);

bn1.setEnabled(false);

} else if (cmd.equals("STOP")) {

sound.stop();

bn2.setEnabled(false);

bn1.setEnabled(true);

}

}

}}

สรปเนอหาของบท

โปรแกรมจาวาแอปเพลตสามารถรนภายใตเวบบราวเซอรได โดยจะตองระบชอโปรแกรมไวภายใน tag <APPLET> ในไฟล HTML

โปรแกรมจาวาแอปเพลตทกโปรแกรมจะตองสบทอดมาจากคลาส Appletโดยใชคาสง extends Applet และจะเรมตนทางานทเมธอด init()

คลาส Applet มเมธอดทสาคญคอเมธอด init(),start(),stop(), destroy() และ paint() destroy() และ paint()

เมธอดของคลาส Graphics สามารถนาไปใชในการวาดรปกราฟฟกตางๆได เชน drawLine() drawPolyline() drawRect() และ ได เชน drawLine(),drawPolyline(),drawRect() และ fillRect() เปนตน

สรปเนอหาของบท

เมธอดทรบ argument เขามาเปนออปเจคของคลาส Graphics คอเมธอด paint() และ update()

คลาส Image เปนคลาสทเกบออปเจคของไฟลรปภาพ

คลาส A dioClip เปนคลาสทเกบออปเจคของไฟลเสยงคลาส AudioClip เปนคลาสทเกบออปเจคของไฟลเสยง

Applet สามารถทจะรบฟงเหตการณตางๆได เชน ActionListener,

ป MouseListener และ KeyListListener เปนตน

แบบฝกหด

ขอท 1• ทดลองเขยนโปรแกรมจาวา แอปเพลต เพอเปนบอรดสาหรบการวาดรปแบบ free

hand

2ขอท 2• ทดลองปรบปรง GUI ของโปรแกรมจาลองระบบธนาคารใหสามารถเรยกใชงานผาน

Web Browser ได