40
0 Modul Java MODUL JAVA APPLETS DISUSUN GUNA MEMENUHI TUGAS MATA KULIAH PBO III DOSEN PENGAMPU: WIJILESTARI S.Si, M.Kom KELOMPOK Sidik Darmadi (110204019) Fajar Nugroho (110204036)

PENGENALAN APPLET

Embed Size (px)

Citation preview

Page 1: PENGENALAN APPLET

0Modul Java Applets

MODUL JAVA APPLETS

DISUSUN GUNA MEMENUHI TUGASMATA KULIAH PBO III

DOSEN PENGAMPU: WIJILESTARI S.Si, M.Kom

KELOMPOK

Sidik Darmadi (110204019)

Fajar Nugroho (110204036)

Lasno (110204038)

Page 2: PENGENALAN APPLET

1Modul Java Applets

DAFTAR ISI

Pengenalan Applet............................................................................................................. 2

Applet................................................................................................................................ 4

Penggunaan Parameter dalam Program Konsole dan Applet ........................................... 7

Basics Graphics In Java Applet ........................................................................................ 12

Latihan Java Applets

Menggambar Garis............................................................................................................ 14

Menggambar Yang Lain.................................................................................................... 14

Warna................................................................................................................................ 15

Mouse Input....................................................................................................................... 16

Keyboard Input.................................................................................................................. 18

Animasi............................................................................................................................. 19

Backbuffer......................................................................................................................... 21

Jam.................................................................................................................................... 22

Grafik 3D........................................................................................................................... 24

Odds and Ends................................................................................................................... 28

Page 3: PENGENALAN APPLET

2Modul Java Applets

PENGENALAN APPLET

          Applet adalah salah satu kelebihan yang dimiliki oleh Java. Applet dikhususkan untuk

aplikasi yang berjalan di web browser seperti Mozilla, Internet Explorer, dll. Walaupun applet

memiliki kelemahan dan kekurangan, namun applet pernah berjaya di masa lalu. Karena saat

Java baru di rilis, kebanyakan aplikasi yang dibuat adalah web based bukan desktop based.

Meskipun banyak lahir bahasa pemrograman baru yang memfokuskan pada web based,

kehadiran applet tetaplah dibutuhkan.

          Untuk memahami applet setidaknya mahasiswa telah memiliki pengetahuan tentang

HyperText Markup Language(HTML), karena applet dibundel di dalam kode HTML seperti

halnya Javascript.

Attribute pada Applet

 

Attribute                     Keterangan

align                         penataan applet pada halaman web

hspace                        jumlah spasi, kiri dan kanan

vspace                        jumlah spasi, atas dan bawah

code                          menentukan nama berkas (.class)

codebase                     menentukan letak direktori dari berkas

altteks                       yang akan ditampilkan (web browser not supported)

name                          untuk komunikasi antar applet

height                        tinggi applet

width                         lebar applet

 

            Walaupun applet kini sudah jarang digunakan, namun ada kalanya kita masih

membutuhkannya. Jika anda tertarik dengan applet, anda dapat mempelajari buku-buku java

terbitan beberapa tahun yang lalu, karena kebanyakan masih membahas tentang applet.

Page 4: PENGENALAN APPLET

3Modul Java Applets

Program Pengenalan

          Disini praktikan akan berkenalan dengan program biner Java lainnya yaitu, appletviewer.

Sesuai dengan namanya, program ini berguna untuk melihat hasil program applet kita sebelum

kita menjalankannya di web browser.

 import javax.swing.JApplet;import java.awt.Graphics;public class TesApplet extends JApplet {      public void paint(Graphics g) {      g.drawString(“Selamat Datang di Dunia Applet Java”, 10, 20);      }}            Simpan Program tersebut dengan nama TesApplet.java. Terlihat perbedaan saat kita

membuat aplikasi Java yang desktop based, dengan Applet. Untuk membuat program yang

desktop based agar dapat dieksekusi kita harus mendeklarasikan method main. Sementara untuk

aplikasi Applet tidak ada kata public static void main(String[] args). Namun pendeklarsian

class haruslah bersifat public, agar bisa dipanggil dari luar class tersebut.

          Jika class tidak dideklarasikan sebagai public, maka akan terjadi kesalahan saat kita

menjalankan perintah appletviewer. Setelah dikompilasi buatlah file seperti di bawah ini :

 

<html>

<applet code = “TesApplet.class” width=”300” height=”300”>

</applet>

</html>

          Simpan dengan nama TesApplet.html. Selanjutnya praktikan dapat mengeksekusinya

sebagai berikut : appletviewer TesApplet.html. Jika tidak ada kesalahan maka anda akan

mendapatkan tulisan Selamat Datang di Dunia Applet Java. Anda juga dapat melihat hasilnya

melalui web browser.

 

Page 5: PENGENALAN APPLET

4Modul Java Applets

APPLET

Class dari program Java dapat dipanggil melalui browser internet bila disisipkan sebagai aplet yang dipanggil dengan TAG <APPLET> dalam HTML:

Contoh 1a: File HTML pemanggil aplet<!-- checkSoundAppet.html --><HTML><BODY><APPLET CODE="checkSoundApplet.class" WIDTH = 200 HEIGHT=200> </APPLET></BODY></HTML>

memanggil applet yang bernama checkSoundApplet.class, yang tersimpan pada direktori yang sama dengan file checkSound.html.

Contoh 1b: File checkSoundApplet.java sebagai sumber dari checkSoundApplet.class

//checkSoundApplet.javaimport java.applet.Applet;import java.awt.Graphics;public class checkSoundApplet extends Applet { public void paint (Graphics g) { g.drawString ("GRRRAAAHHHUGH!!",0,50); }}

Program di atas dapat dijalankan dengan perintah sbb:d:\modul>javac checkSoundApplet.java

Apabila tidak ada pesan error, dari perintah javac (java compiler) ini dihasilkan sebuah file baru: checkSoundApplet.class. Untuk menjalankannya ketikkan:

d:\modul>appletviewer checkSoundApplet.html

Dapat pula dipanggil melalui web browser, pilih File Open File checkSoundApplet.html.Catatan: 1. Bila nama kelas applet-nya adalah checkSoundApplet, maka nama filenya harus

checkSoundApplet.java 2. Pada saat kompilasi dengan javac perhatikan baik-baik huruf kapital atau tidaknya.

SANGAT DIANJURKAN penulisan huruf kapital atau tidaknya agar TEPAT SAMA dengan nama file dan kelas applet-nya.

Contoh 2a: File HTML pemanggil aplet<!-- Jabberwock.html --><html><body><applet code=JabberwockApplet.class height=250 width=300></applet>

Page 6: PENGENALAN APPLET

5Modul Java Applets

</body></html>

Contoh 2b: File MonsterApplet.java sebagai sumber MonsterApplet.class

// kita sudah punya kelas theMonster, jadi tidak usah dibuat lagi.public class MonsterApplet extends java.applet.Applet { private Monster Ogre; private Monster Jabberwock; public void paint(Graphics g) {

Ogre = new Monster; Jabberwock = new Monster("betina","koneng",false);

print("Check Status Ogre...!", 20); print(Ogre.showAtts(),30); print("Coba kita kasih makan",40); print(Ogre.feedMonster("bayi unta"),50); print("Lihat status baru ...",60); print(Ogre.showAtts(),70);

print("Check Status Jabberwock...!",90); print(Jabberwock.showAtts(),100); print("Coba kita kasih makan",110); print(Jabberwock.feedMonster("bayi vampir"),120); } public void print(Graphics g,String teks,int y){ g.drawString(teks, 5, y); }}

Petunjuk lengkap tentang penggunaan tag <APPLET> dalam HTML

<APPLET   CODE=classFileName   HEIGHT=height   WIDTH=width   MAYSCRIPT   [NAME=appletName]   [CODEBASE=classFileDirectory]   [ALT=alternateText]   [ALIGN= "left"|"right"| "top"|"absmiddle"|"absbottom"|       "texttop"|"middle"|"baseline"|"bottom"]   [HSPACE=spaceInPixels]   [VSPACE=spaceInPixels]>

Page 7: PENGENALAN APPLET

6Modul Java Applets

[<PARAM NAME=parameterName VALUE=parameterValue >][<PARAM NAME=........ >][ ... </PARAM>]</APPLET>

Keterangan:CODE= classFileName

nama kelas applet ber-ekstensi .class yang akan ditampilkan.

HEIGHT= height menentukan tinggi applet di dalam browses dalam ukuran pixel.

WIDTH= width menentukan lebar applet di dalam browses dalam ukuran pixel.

MAYSCRIPT mengijinkan applet mengakses Java ScriptNAME= appletName

nama Applet.

CODEBASE= classFileDirectory

letak direktori kelas applet (.class), jika berbeda dengan lokasi file html yang dipanggil.

ALT= alternateText teks yang akan ditampilkan bila browser tidak mendukung tag <APPLET>.

ALIGN= alignment perataan applet pada HTML.

HSPACE= spaceInPixels

margin horisontal dari tepi kiri dan kanan browser ke applet.

VSPACE= spaceInPixels

margin vertikal dari tepi atas dan bawah browser ke applet

<PARAM NAME=parameterName VALUE=paramtrValue >

menentukan parameter applet.nama parameter.nilai parameter.

Page 8: PENGENALAN APPLET

7Modul Java Applets

PENGGUNAAN PARAMETER DALAM PROGRAM KONSOLE DAN APPLET

Parameter adalah data yang disertakan dalam pemanggilan program/perintah. Misal perintah DOS:

C:\>dir *.exe, dir adalah perintah, *.exe adalah parameter.Atau misalnya perintah:

C:\> win.com /D:M, win.com adalah program, dan /D:M adalah parameter.

Contoh 1a: Kelas konsole sederhana yang menggunakan parameter

class Hello { static String teks; public static void main(String args[]){ teks = "Hello, "; for(int i = 0;i<args.length;i++){ System.out.println(teks+args[i]+"!"); } }}

Kompilasi: javac Hello.javaEksekusi: 1. d:\modul>java Hello

2. d:\modul>java Hello Budi SantosoHello, Budi!Hello, Santoso!

3. d:\modul>java Hello "Budi Santoso"Hello Budi Santoso

Contoh 1b: Kelas konsole yang menggunakan parameter

class Banding { static float Monster1; static float Monster2; public static void main(String args[]){ // args adalah array dari if (args.length !=2){ // parameter, print("Cara penggunaan:"); // args.length adalah jumlah print("java Banding angka1 angka2"); // parameter yang disertakan System.exit(1); // dlm pemanggilan program } Monster1 = Float.parseFloat(args[0]); Monster2 = Float.parseFloat(args[1]); print("Tinggi Monster 1: " + Monster1 + "meter"); print("Tinggi Monster 2: " + Monster2 + "meter"); if (Monster1>Monster2) {

Page 9: PENGENALAN APPLET

8Modul Java Applets

print("Monster 1 lebih besar dari Monster 2."); } else if (Monster1<Monster2){ print("Monster 1 lebih kecil dari Monster 2."); } else { print("Kedua monster sama besar."); } } public static void print(String teks){ System.out.println(teks); }}

Kompilasi: javac Banding.javaEksekusi: 1. d:\modul>java Banding

Cara penggunaan:java Banding angka1 angka2

2. d:\modul>java Banding 10 20Tinggi Monster 1: 10 meterTinggi Monster 2: 20 meterMonster 1 lebih kecil dari Monster 2

Contoh 2a: Applet sederhana menggunakan parameter

//checkSoundAppletParam.javaimport java.applet.Applet;import java.awt.Graphics;public class checkSoundApplet extends Applet { String teks; public void init(){ teks = getParameter("teks"); if (teks == null) { teks = "Anda harus memasukkan tag <param name=\"teks\" value=\"isi teks\">"; } } public void paint(Graphics g) { g.drawString("checkSound, "+teks,0,50); }}

Contoh 2b: File html pemanggil Applet dengan parameter

<! checkSoundAppletParam.html><HTML><BODY><APPLET CODE = "checkSoundAppletParam.class"

WIDTH = 800 HEIGHT = 600>

Page 10: PENGENALAN APPLET

9Modul Java Applets

<PARAM NAME="teks" VALUE="GGRRRGHHAARRGH!"></PARAM>

</APPLET></BODY></HTML>

Kompilasi: javac checkSoundAppletParam.javaEksekusi:

d:\modul> appletviewer checkSoundAppletParam.html

Contoh 3a: Applet menggunakan parameter

//BandingApplet.javaimport java.applet.*;import java.awt.*;

public class BandingAppletParam extends Applet{ float Monster1=0; float Monster2=0; public void init(){ String tx1 = getParameter("Monster1"); String tx2 = getParameter("Monster2"); if (tx1==null | tx2==null){ Monster1 = -99999; Monster2 = -99999; } else { Monster1 = Float.parseFloat(tx1); Monster2 = Float.parseFloat(tx2); } } public void paint(Graphics g){ if (Monster1==-99999) { print("Tambahkan parameter pada tag applet:",5); print("<param name=Monster1 value=angka1",20); print("<param name=Monster2 value=angka2",35); print("</param>",5,50); } else if (Monster1>Monster2) { print("Tinggi Monster 1: " + Monster1,5); print("Tinggi Monster 2: " + Monster2,20); print("Jadi Monster 1 lebih tinggi dari Monster 2.", 35); } else if (Monster1<Monster2){ print("Tinggi Monster 1: " + Monster1,5); print("Tinggi Monster 2: " + Monster2,20); print("Jadi Monster 1 lebih pendek dari Monster 2.",35); } else { print("Tinggi Monster 1: " + Monster1,5);

Page 11: PENGENALAN APPLET

10Modul Java Applets

print("Tinggi Monster 2: " + Monster2,20); print("Jadi kedua monster sama tinggi",35); } } public void print(String teks, int y){ Graphics g=this.getGraphics(); g.drawString(teks,5,y+30); }}

Contoh 3b: File html pemanggil Applet dengan parameter

<! BandingAppletParam.html><HTML><BODY><APPLET CODE = "BandingAppletParam.class" WIDTH = 500 HEIGHT = 200>

<param name=Monster1 value=150.1><param name=Monster2 value=150.2></param>

</APPLET></BODY></HTML>

Kompilasi: javac BandingAppletParam.javaEksekusi:

d:\modul> appletviewer BandingAppletParam.html

Contoh 4a: Applet menggunakan parameter

//MonsterAppletParam.javapublic class MonsterAppletParam extends java.applet.Applet { private theMonster Ogre; public void init(){ String tx1 = getParameter("Kelamin"); String tx2 = getParameter("Warna"); String tx3 = getParameter("Status"); if (tx1==null | tx2==null | tx3==null){ Ogre = new theMonster(); } else { Ogre = new theMonster(tx1,tx2,tx3); } } public void paint(Graphics g) { print(g,"Check Status...!", 50); print(g,Ogre.showAtts(), 70); print(g,"Coba kita kasih makan", 110); print(g,Ogre.feedMonster("Bayi dinosaurus"), 130); print(g,"Lihat status baru ...", 150); print(g,Ogre.showAtts(), 170); print(g,"Coba kita kasih makan lagi ...",210);

Page 12: PENGENALAN APPLET

11Modul Java Applets

print(g,Ogre.feedMonster("Bayi dinosaurus"),230); } public void print(Graphics g,String teks,int y){ g.drawString(teks, 5, y); }}

Contoh 4b: File html pemanggil Applet dengan parameter

<! MonsterAppletParam.html ><html><body><applet code=MonsterAppletParam.class height=300 width=500>

<param name=Kelamin value=betina><param name=Warna value=merah><param name=Status value=lapar></param>

</applet></body></html>

Kompilasi: javac MonsterAppletParam.javaEksekusi:

d:\modul> appletviewer BandingAppletParam.html

Page 13: PENGENALAN APPLET

12Modul Java Applets

BASICS GRAPHICS IN JAVA APPLET

Koordinat grafik dalam komputer berbeda dengan koordinat grafik sehari-hari. Perhatikan gambar berikut:

Koordinat dalam grafik Komputer

Color Red Green BlueWhite 255 255 255Black 0 0 0Light Gray 192 192 192Dark Gray 128 128 128Red 255 0 0Green 0 255 0Blue 0 0 255Yellow 255 255 0Purple 255 0 255

Warna Dasar dalam grafik komputer

Berikut ini contoh applet yang menggambar berbagai bentuk di grafik Java.

Contoh 1: Fungsi-fungsi Dasar Grafis Applet

//BasicGraphics.javaimport java.applet.Applet;import java.awt.*;public class BasicGraphics extends Applet { public void paint (Graphics g) { int xPts[] = {5, 25, 50, 30, 15, 5}; int yPts[] = {10, 35, 20, 65, 40, 10}; Image img = getImage(getCodeBase(), "gambar.gif g.drawString ("Java Graphics Basics",0,50); g.drawLine(5, 100, 150, 250); g.drawRect(50, 100, 150, 550); g.drawRoundRect(50, 150, 150, 550, 6, 12); g.drawPolygon(xPts, yPts, xPts.length); // cara lain membuat polygon // Polygon poly = new Polygon(xPts+100, yPts+100, // xPts.length); // g.fillPolygon(poly); g.drawOval(150, 100, 250, 55); g.drawArc(50, 100, 150, 275, 95, 115); g.drawImage(img, (size().width - img.getWidth(this)) / 2, (size().height - img.getHeight(this)) / 2, this); }}

Page 14: PENGENALAN APPLET

13Modul Java Applets

File HTML untuk memanggilnya adalah sbb:<!-- BasicGraphics.html --><HTML><BODY><APPLET CODE="BasicGraphics.class" WIDTH = 500 HEIGHT=500> </APPLET></BODY></HTML>

Berikut ini contoh applet untuk menampilkan String yang terformat di dalam grafik.

Contoh 2: Menampilkan String terformat dalam Grafis

import java.applet.*;import java.awt.*;public class DrawText extends Applet { public void paint(Graphics g) { Font font = new Font("Helvetica", Font.BOLD + Font.ITALIC, 22); FontMetrics fm = g.getFontMetrics(font); String str = new String("The highest result of education is.."); g.setFont(font); g.drawString(str, (size().width - fm.stringWidth(str)) / 2, ((size().height - fm.getHeight()) / 2) + fm.getAscent()); }}

Buatlah file HTML untuk memanggil applet ini.

Sumber: Java Unleashed 2nd Edition, Michael Morrison

Page 15: PENGENALAN APPLET

14Modul Java Applets

LATIHAN JAVA APPLET

Menggambar Garis

import java.applet.*; import java.awt.*;

public class DrawingLines extends Applet { int

width, height;

public void init() {width = getSize().width;height = getSize().height; setBackground( Color.black );

}

public void paint( Graphics g ) {g.setColor( Color.green );for ( int i = 0; i < 10; ++i ) {

g.drawLine( width, height, i * width / 10, 0 );}

}}

Menggambar Yang Lain

import java.applet.*; import java.awt.*;

public class DrawingStuff extends Applet { int width,

height;

public void init() {width = getSize().width;height = getSize().height; setBackground( Color.black );

}

public void paint( Graphics g ) {

// As we learned in the last lesson,// the origin (0,0) is at the upper left corner.// x increases to the right, and y increases downward.

g.setColor( Color.red );g.drawRect( 10, 20, 100, 15 );

Page 16: PENGENALAN APPLET

15Modul Java Applets

g.setColor( Color.pink );g.fillRect( 240, 160, 40, 110 );

g.setColor( Color.blue );g.drawOval( 50, 225, 100, 50 ); g.setColor( Color.orange ); g.fillOval( 225, 37, 50, 25 );

g.setColor( Color.yellow );g.drawArc( 10, 110, 80, 80, 90, 180 ); g.setColor( Color.cyan );g.fillArc( 140, 40, 120, 120, 90, 45 );

g.setColor( Color.magenta );g.fillArc( 150, 150, 100, 100, 90, 90 ); g.setColor( Color.black );g.fillArc( 160, 160, 80, 80, 90, 90 );

g.setColor( Color.green );g.drawString( "Groovy!", 50, 150 );

}}

Warna

import java.applet.*; import java.awt.*;

public class DrawingWithColor1 extends Applet {

int width, height;int N = 25; // the number of colors createdColor[] spectrum; // an array of elements, each of type ColorColor[] spectrum2; // another array

public void init() {width = getSize().width;height = getSize().height; setBackground( Color.black );

// Allocate the arrays; make them "N" elements long spectrum = new Color[ N ] ;spectrum2 = new Color[ N ] ;

// Generate the colors and store them in the arrays.for ( int i = 1; i <= N; ++i ) {

// The three numbers passed to the Color() constructor// are RGB components in the range [0,1].// The casting to (float) is done so that the divisions will be// done with floating point numbers, yielding fractional quotients.

Page 17: PENGENALAN APPLET

16Modul Java Applets

// As i goes from 1 to N, this color goes from almost black to white. spectrum[ i-1 ] = new Color( i/(float)N, i/(float)N, i/(float)N );

// As i goes from 1 to N, this color goes from almost pure green topure red.

spectrum2[ i-1 ] = new Color( i/(float)N, (N-i)/(float)N, 0 );}

}

public void paint( Graphics g ) {

int step = 90 / N;for ( int i = 0; i < N; ++i ) {

g.setColor( spectrum[ i ] );g.fillArc( 0, 0, 2*width, 2*height, 90+i*step, step+1 );

g.setColor( spectrum2[ i ] );g.fillArc( width/3, height/3, 4*width/3, 4*height/3, 90+i*step, step+1

);}

}}

Mouse Input

import java.applet.*; import java.awt.*;import java.awt.event.*;

public class Mouse1 extends Appletimplements MouseListener, MouseMotionListener {

int width, height;int mx, my; // the mouse coordinates boolean isButtonPressed = false;

public void init() {width = getSize().width;height = getSize().height; setBackground( Color.black );

mx = width/2; my = height/2;

addMouseListener( this );addMouseMotionListener( this );

}

public void mouseEntered( MouseEvent e ) {// called when the pointer enters the applet's rectangular area

Page 18: PENGENALAN APPLET

17Modul Java Applets

}public void mouseExited( MouseEvent e ) {

// called when the pointer leaves the applet's rectangular area}public void mouseClicked( MouseEvent e ) {

// called after a press and release of a mouse button// with no motion in between// (If the user presses, drags, and then releases, there will be// no click event generated.)

}public void mousePressed( MouseEvent e ) { // called after a button is pressed down

isButtonPressed = true;setBackground( Color.gray );repaint();// "Consume" the event so it won't be processed in the// default manner by the source which generated it.e.consume();

}public void mouseReleased( MouseEvent e ) { // called after a button is released

isButtonPressed = false;setBackground( Color.black );repaint();e.consume();

}public void mouseMoved( MouseEvent e ) { // called during motion when no buttons are down

mx = e.getX();my = e.getY();showStatus( "Mouse at (" + mx + "," + my + ")" );repaint();e.consume();

}public void mouseDragged( MouseEvent e ) { // called during motion with buttons down

mx = e.getX();my = e.getY();showStatus( "Mouse at (" + mx + "," + my + ")" );repaint();e.consume();

}

public void paint( Graphics g ) {if ( isButtonPressed ) {

g.setColor( Color.black );}else {

g.setColor( Color.gray );}g.fillRect( mx-20, my-20, 40, 40 );

}

Page 19: PENGENALAN APPLET

18Modul Java Applets

}

Keyboard Input

import java.applet.*; import java.awt.*;import java.awt.event.*;

public class Keyboard1 extends Applet implements KeyListener, MouseListener {

int width, height; int x, y;String s = "";

public void init() {width = getSize().width;height = getSize().height; setBackground( Color.black );

x = width/2;y = height/2;

addKeyListener( this ); addMouseListener( this );

}

public void keyPressed( KeyEvent e ) public void keyReleased( KeyEvent e ) public void keyTyped( KeyEvent e ) {

char c = e.getKeyChar();if ( c !=

KeyEvent.CHAR_UNDEFINED s

{ }{

) {

}

}}

public void mouseEntered( MouseEvent e ) { }public void mouseExited( MouseEvent e ) { }public void mousePressed( MouseEvent e ) { }public void mouseReleased( MouseEvent e ) {public void mouseClicked( MouseEvent e ) {

x = e.getX();y = e.getY(); s = " ";repaint();e.consume();

}

public void paint( Graphics g ) { g.setColor( Color.gray ); g.drawLine( x, y, x, y-10 );

Page 20: PENGENALAN APPLET

19Modul Java Applets

g.drawLine( x, y, x+10, y ); g.setColor( Color.green ); g.drawString( s, x, y );

}}

}

Animasi

import java.applet.*; import java.awt.*;

public class Threads1 extends Applet implements Runnable {

int width, height;int i = 0;Thread t = null;boolean threadSuspended;

// Executed when the applet is first created. public void init() {

System.out.println("init(): begin"); width = getSize().width;height = getSize().height;setBackground( Color.black );System.out.println("init(): end");

}

// Executed when the applet is destroyed. public void destroy() {

System.out.println("destroy()");}

// Executed after the applet is created; and also whenever // the browser returns to the page containing the applet. public void start() {

System.out.println("start(): begin");if ( t == null ) {

System.out.println("start(): creating thread"); t = new Thread( this );System.out.println("start(): starting thread"); threadSuspended = false;t.start();

}else {

if ( threadSuspended ) {threadSuspended = false;System.out.println("start(): notifying thread");

synchronized( this ) {

Page 21: PENGENALAN APPLET

20Modul Java Applets

notify();}

}}System.out.println("start(): end");

}

// Executed whenever the browser leaves the page containing the applet. public void stop() {System.out.println("stop(): begin");threadSuspended = true;

}

// Executed within the thread that this applet created. public void run() {System.out.println("run(): begin");try {

while (true) {System.out.println("run(): awake");

// Here's where the thread does some work ++i; // this is shorthand for "i = i+1;" if ( i == 10 ) {

i = 0;

}showStatus( "i is " + i );

// Now the thread checks to see if it should suspend itself if ( threadSuspended ) {synchronized( this ) {

while ( threadSuspended ) {System.out.println("run(): waiting");wait();

}}

}System.out.println("run(): requesting repaint");repaint();System.out.println("run(): sleeping");t.sleep( 1000 ); // interval given in milliseconds

}}catch (InterruptedException e) { }System.out.println("run(): end");

}

// Executed whenever the applet is asked to redraw itself. public void paint( Graphics g ) {

System.out.println("paint()");g.setColor( Color.green );g.drawLine( width, height, i * width / 10, 0 );

}

Page 22: PENGENALAN APPLET

21Modul Java Applets

}

Backbuffer

import java.applet.*; import java.awt.*;import java.awt.event.*; import java.lang.Math;

public class NoBackbuffer1 extends Applet implements MouseMotionListener {

int width, height;int mx, my; // the mouse coordinates Point[] points;int N = 300;

public void init() {width = getSize().width;height = getSize().height; setBackground( Color.black );

mx = width/2; my = height/2;

points = new Point[ N ] ;for ( int i = 0; i < N; ++i ) {

int x = (int)(( Math.random() - 0.5 ) * width / 1.5); int y = (int)(( Math.random() - 0.5 ) * height / 1.5); points[i] = new Point( x, y );

}

addMouseMotionListener( this );}

public void mouseMoved( MouseEvent e ) {mx = e.getX(); my = e.getY(); showStatus( "Mouse at (" + mx + "," + my + ")" );repaint();e.consume();

}public void mouseDragged( MouseEvent e ) { }

public void paint( Graphics g ) {g.setColor( Color.white );for ( int j = 1; j < N; ++j ) {

Point A = points[ j-1] ;Point B = points[ j] ;

Page 23: PENGENALAN APPLET

22Modul Java Applets

g.drawLine( mx+A.x, my+A.y, mx+B.x, my+B.y );}

}}

Jam

import java.applet.*; import java.awt.*; import java.util.*; import java.text.*;

public class Clock1 extends Applet implements Runnable {

int width, height;Thread t = null;boolean threadSuspended;int hours=0, minutes=0, seconds=0; String timeString = "";

public void init() {width = getSize().width;height = getSize().height; setBackground( Color.black );

}

public void start() { if ( t == null ) {

t = new Thread( this );t.setPriority( Thread.MIN_PRIORITY );threadSuspended = false;t.start();

}else {

if ( threadSuspended ) {threadSuspended = false;synchronized( this ) {

notify();}

}}

}

public void stop() {threadSuspended = true;

}

public void run() { try {

Page 24: PENGENALAN APPLET

23Modul Java Applets

while (true) {

// Here's where the thread does some work Calendar cal = Calendar.getInstance(); hours = cal.get( Calendar.HOUR_OF_DAY ); if ( hours > 12 ) hours -= 12;

minutes = cal.get( Calendar.MINUTE );seconds = cal.get( Calendar.SECOND );

SimpleDateFormat formatter= new SimpleDateFormat( "hh:mm:ss", Locale.getDefault() ); Date date

= cal.getTime();timeString = formatter.format( date );

// Now the thread checks to see if it should suspend itself if ( threadSuspended ) {

synchronized( this ) {while ( threadSuspended ) {

wait();}

}}repaint();t.sleep( 1000 ); // interval given in milliseconds

}}catch (InterruptedException e) { }

}

void drawHand( double angle, int radius, Graphics g ) {angle -= 0.5 * Math.PI;int x = (int)( radius*Math.cos(angle) ); int y = (int)( radius*Math.sin(angle) ); g.drawLine( width/2, height/2, width/2 + x, height/2 + y );

}

void drawWedge( double angle, int radius, Graphics g ) {angle -= 0.5 * Math.PI;int x = (int)( radius*Math.cos(angle) ); int y = (int)( radius*Math.sin(angle) ); angle += 2*Math.PI/3;int x2 = (int)( 5*Math.cos(angle) ); int y2 = (int)( 5*Math.sin(angle) ); angle += 2*Math.PI/3;int x3 = (int)( 5*Math.cos(angle) ); int y3 = (int)( 5*Math.sin(angle) );g.drawLine( width/2+x2, height/2+y2, width/2 + x, height/2 + y ); g.drawLine( width/2+x3, height/2+y3, width/2 + x, height/2 + y );g.drawLine( width/2+x2, height/2+y2, width/2 + x3, height/2 + y3 );

Page 25: PENGENALAN APPLET

24Modul Java Applets

}

public void paint( Graphics g ) {g.setColor( Color.gray );drawWedge( 2*Math.PI * hours / 12, width/5, g ); drawWedge( 2*Math.PI * minutes / 60, width/3, g ); drawHand( 2*Math.PI * seconds / 60, width/2, g ); g.setColor( Color.white );g.drawString( timeString, 10, height-10 );

}}

Perhatikan, mungkin waktu yang ditampilkan di sudut kiri bawah tidak sesuai – beberapa browser (mungkin versi lama) mengartikan “default” timezone sebagai waktu yang berbeda dari zona waktu lokal. (namun jarum jam selalu menunjuk kepada waktu yang benar) jika masalah ini terjadi, coba gunakan

timeString = date.toString();

daripada:

timeString = formatter.format( date );

Grafik 3D

The source code:

import java.applet.*; import java.awt.*;import java.awt.event.*; import java.lang.Math;

class Point3D {public int x, y, z;public Point3D( int X, int Y, int Z ) { x = X; y =

Y; z = Z;}

}

class Edge {public int a, b;public Edge( int A, int B ) { a = A; b

= B;}

}

Page 26: PENGENALAN APPLET

25Modul Java Applets

public class WireframeViewer extends Applet implements MouseListener, MouseMotionListener {

int width, height;int mx, my; // the most recently recorded mouse coordinates

Image backbuffer; Graphics backg;

int azimuth = 35, elevation = 30;

Point3D[] vertices; Edge[] edges;

public void init() {

width = getSize().width; height = getSize().height;

vertices = new

Point3D[ 8 ] ;vertices[0] = new Point3D( -1,vertices[1] = new Point3D( -1,vertices[2] = new Point3D( -1,vertices[3] = new Point3D( -1,vertices[4] = new Point3D( 1,vertices[5] = new Point3D( 1,vertices[6] = new Point3D( 1,vertices[7] = new Point3D( 1,

edges = new Edge[ 12 ];edges[ 0] = newEdge( 0, 1 ) ;edges[ 1] = newEdge( 0, 2 ) ;edges[ 2] = newEdge( 0, 4 ) ;edges[ 3] = newEdge( 1, 3 );edges[ 4] = newEdge( 1, 5 );edges[ 5] = newEdge( 2, 3 );edges[ 6] = newEdge( 2, 6 );edges[ 7] = newEdge( 3, 7 );edges[ 8] = newEdge( 4, 5 );edges[ 9] = newEdge( 4, 6 );edges[10] = newEdge( 5, 7 );

-1, -1 );-1, 1 );1, -1 );1, 1 );-1, -1 );-1, 1 );1, -1 );1, 1 );

edges[11] = new Edge( 6, 7 ) ;

backbuffer = createImage( width, height ); backg = backbuffer.getGraphics();drawWireframe( backg );

Page 27: PENGENALAN APPLET

26Modul Java Applets

addMouseListener( this );addMouseMotionListener( this );

}

void drawWireframe( Graphics g ) {

// compute coefficients for the projection double theta = Math.PI * azimuth / 180.0; double phi = Math.PI * elevation / 180.0;float cosT = (float)Math.cos( theta ), sinT = (float)Math.sin( theta ); float cosP = (float)Math.cos( phi ), sinP = (float)Math.sin( phi ); float cosTcosP = cosT*cosP, cosTsinP = cosT*sinP,

sinTcosP = sinT*cosP, sinTsinP = sinT*sinP;

// project vertices onto the 2D viewportPoint[] points;points = new Point[ vertices.length ];int j;int scaleFactor = width/4;float near = 3; // distance from eye to near planefloat nearToObj = 1.5f; // distance from near plane to center of object for ( j = 0; j < vertices.length; ++j ) {

int x0 = vertices[ j] .x;int y0 = vertices[ j] .y;int z0 = vertices[ j] . z;

// compute an orthographic projectionfloat x1 = cosT*x0 + sinT*z0;float y1 = -sinTsinP* x0 + cosP* y0 + cosTsinP* z0;

// now adjust things to get a perspective projectionfloat z1 = cosTcosP*z0 - sinTcosP*x0 - sinP*y0;

x1 = x1*near/(z1+near+nearToObj);y1 = y1*near/(z1+near+nearToObj);

// the 0.5 is to round off when converting to int points[j] = new Point((int)(width/2 + scaleFactor*x1 + 0.5),(int)(height/2 - scaleFactor*y1 + 0.5)

);}

// draw the wireframeg.setColor( Color.black ); g.fillRect( 0, 0, width, height );g.setColor( Color.white );for ( j = 0; j < edges.length; ++j ) {

g.drawLine(points[ edges[ j] .a ] .x, points[ edges[ j] .a ] .y,points[ edges[ j] .b ] .x, points[ edges[ j] .b ] .y

Page 28: PENGENALAN APPLET

27Modul Java Applets

);}

}

public void mouseEntered( MouseEvent e ) { } public void mouseExited( MouseEvent e ) { } public void mouseClicked( MouseEvent e ) { } public void mousePressed( MouseEvent e ) {

mx = e.getX();

my = e.getY();e.consume();

}public void mouseReleased( MouseEvent e ) { } public void mouseMoved( MouseEvent e ) { } public void mouseDragged( MouseEvent e ) {

// get the latest mouse positionint new_mx = e.getX();int new_my = e.getY();

// adjust angles according to the distance travelled by the mouse // since the last eventazimuth -= new_mx - mx;elevation += new_my - my;

// update the backbuffer drawWireframe( backg );

// update our datamx = new_mx;my = new_my;

repaint();e.consume();

}

public void update( Graphics g ) {g.drawImage( backbuffer, 0, 0, this );showStatus("Elev: "+elevation+" deg, Azim: "+azimuth+" deg");

}

public void paint( Graphics g ) { update( g );}

}

Odds and Ends

import java.applet.*; import

Page 29: PENGENALAN APPLET

28Modul Java Applets

java.awt.*;import java.lang.Math;

public class ArchimedianSpiral extends Applet {

int width, height;int N = 30; // number of points per full rotationint W = 5; // winding number, or number of full rotations

public void init() {

width = getSize().width;height = getSize().height; setBackground( Color.black ); setForeground( Color.green );

}

public void paint( Graphics g ) {

int x1 = 0, y1 = 0, x2, y2;for ( int i = 1; i <= W*N; ++i ) { double angle =

2*Math.PI*i/(double)N;double radius = i/(double)N * width/2 / (W+1);x2 = (int)( radius*Math.cos(angle) ); y2 = -(int)( radius*Math.sin(angle) ); g.drawLine( width/2+x1, height/2+y1, width/2+x2, height/2+y2 );x1 = x2;y1 = y2;

}

}}