บทท ่ี8it.nrru.ac.th/krit/410303/chap08.pdf · 2016-02-17 ·...
TRANSCRIPT
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 ได