Quantcast

21 March 2008

Jam Analog Java

Jam analog, selalu menjadi pembuktian pribadi kalo aku bisa sebuah bahasa pemrograman baru. Dengan cuma mengandalkan logika dari matematika sederhana, "Trigonometri". Misalkan, derajat jarum jam merupakan hasil perbandingan dengan nilai kosinus dan sinus. Akhirnya, jadilah sebuah jam dengan menggunakan class dasar awt, frame, math, dan Calendar. Dengan pembuatan selama tiga hari ngotak-ngatik javadoc, saat masih buta java beberapa tahun lalu, akhirnya bisa mengerti dasar pemrograman OOP dari java.
Sebenarnya, program seperti ini selalu menjadi pemicu utama ketertarikan untuk belajar dan terus belajar, sayangnya entah kenapa sekarang kehilangan semua itu di saat sangat dibutuhkan untuk belajar hal baru. Juga buat teman-temanku yang sedang membuat TA, semangat terus, seamuanya bisa kalo mau belajar, especially for me.
Source kodenya:

//Source:
import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
import java.util.Random;
public class Ana extends Frame {
private int PusatX,PusatY,xorR,xorG,xorB;
Random Rdm;
public Ana(){
super("om_agus Klok_klok");
setLayout(new FlowLayout());
setSize(800,600);
addWindowListener(new WindowListener(){
public void windowActivated(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public void windowDeactivated(WindowEvent e){}
public void windowDeiconified(WindowEvent e) {}
public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
});
Rdm=new java.util.Random();
setBackground(Color.black);
new javax.swing.Timer(100,new ActionListener(){
public void actionPerformed(ActionEvent ev){
repaint();
PusatX=getWidth()/2;
PusatY=getHeight()/2;
xorR=Rdm.nextInt(255);
xorG=Rdm.nextInt(255);
xorB=Rdm.nextInt(255);
}
}).start();
}
public static void main(String[]a){
new Ana().setVisible(true);
}
public void paint(Graphics G){

G.setColor(Color.BLACK);
G.setColor(Color.red);int Panjang;
if(getWidth()<getHeight())Panjang=getWidth()-100;
else Panjang=getHeight()-100;
G.drawOval(PusatX-Panjang/2,PusatY-Panjang/2,Panjang,Panjang);

G.setColor(Color.white);
for(int I=1;I<=12;I++){
G.fillOval((int)(PusatX+Math.sin(30*Math.PI*I/180)*Panjang/2),(int)(PusatY+Math.cos(30*Math.PI*I/180)*-1*Panjang/2),5,5);
G.drawString(""+I,(int)(PusatX+Math.sin(30*Math.PI*I/180)*Panjang/2.2),(int)(PusatY+Math.cos(30*Math.PI*I/180)*-1*Panjang/2.2));
}

G.setXORMode(new Color(xorR,xorG,xorB));

float Detik=Waktu(Calendar.SECOND)+(float)Waktu(Calendar.MILLISECOND)/1000;
G.setColor(Color.white);
G.drawLine(PusatX,PusatY,(int)(PusatX+(Math.sin(2*Math.PI*Detik/60)*Panjang/2)),(int)(PusatY+(-1*Math.cos(2*Math.PI*Detik/60)*Panjang/2)));

float Menit=Waktu(Calendar.MINUTE)+(float)Detik/60;
G.setColor(Color.green);
G.drawLine(PusatX,PusatY,(int)(PusatX+(Math.sin(2*Math.PI*Menit/60)*Panjang/2.1)),(int)(PusatY+(-1*Math.cos(2*Math.PI*Menit/60)*Panjang/2.1)));

float Jam=Waktu(Calendar.HOUR)+(float)Menit/60;
G.setColor(Color.BLUE);
G.drawLine(PusatX,PusatY,(int)(PusatX+(Math.sin(2*Math.PI*Jam/12)*Panjang/2.3)),(int)(PusatY+(-1*Math.cos(2*Math.PI*Jam/12)*Panjang/2.3)));

G.fillOval(PusatX-5,PusatY-5,10,10);
}
private int Waktu(int Jenis){
return Calendar.getInstance().get(Jenis);
}
}

Ganbatte kudasai!

2 °C:

TOPI HITAM said...

Aku Copy Yo mas

main ke Blog ku dong

om4gus said...

Iya