pengenalan applet
TRANSCRIPT
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)
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
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.
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.
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>
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]>
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.
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) {
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>
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);
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);
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
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); }}
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
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 );
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.
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
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 );
}
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 );
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 ) {
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 );
}
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] ;
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 {
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 );
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;}
}
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 );
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
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
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;
}
}}