diartikel sebelumnya kita telah tau bagaimana membuat jam digital yang bisa terus berubah tiap detik,
sekarang kita akan mencoba membuat jam analog di tampilan aplikasi kita, karena jam analog menggunakan jarum sebagai penunjuk jam, menit dan detiknya, maka kita akan sedikit kembali ke materi matematika tentang sudut, ya kita perlu rumusan trigonometri untuk menentukan titik-titik ujung tiap jarum jam yang kita buat..
sambil membuka kembali buku-buku matematika ayo mari kita tulis program berikut ini..
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Doel Dhe’i
*/
public class analog extends Panel {
public analog() {
setBackground(Color.WHITE);
Thread tr = new Thread() {
@Override
public void run() {
try {
while (true) {
repaint();
sleep(1000);
}
} catch (InterruptedException ex) {
Logger.getLogger(analog.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
tr.start();
}
@Override
public void paint(Graphics g) {
int tinggi, lebar, pusX, pusY, diameter;
lebar = getWidth();
tinggi = getHeight();
pusX = lebar / 2;
pusY = tinggi / 2;
if (lebar > tinggi) {
diameter = (int) (tinggi * 0.9);
} else {
diameter = (int) (lebar * 0.9);
}
g.setColor(Color.RED);
g.drawOval(pusX – diameter / 2, pusY – diameter / 2, diameter, diameter);
Calendar waktu = Calendar.getInstance();
int detik = waktu.get(Calendar.SECOND);
int menit = waktu.get(Calendar.MINUTE);
int jam = waktu.get(Calendar.HOUR);
g.setColor(Color.BLACK);
for (int i = 1; i <= 60; i++) {
if (i % 5 == 0) {
g.fillOval(getPosX(i * 6, (int) (diameter / 2), pusX) – 4,
getPosY(i * 6, (int) (diameter / 2), pusY) – 4,
8, 8);
} else {
g.fillOval(getPosX(i * 6, (int) (diameter / 2), pusX) – 2,
getPosY(i * 6, (int) (diameter / 2), pusY) – 2,
4, 4);
}
}
g.setColor(Color.GREEN);
g.drawLine(pusX, pusY,
getPosX(detik * 6, (int) (diameter / 2 * 0.9), pusX),
getPosY(detik * 6, (int) (diameter / 2 * 0.9), pusY));
g.setColor(Color.YELLOW);
g.drawLine(pusX, pusY,
getPosX(menit * 6 + ((int) (detik / 10)), (int) (diameter / 2 * 0.85), pusX),
getPosY(menit * 6 + ((int) (detik / 10)), (int) (diameter / 2 * 0.85), pusY));
g.setColor(Color.BLUE);
g.drawLine(pusX, pusY,
getPosX(jam * 30 + ((int) (menit / 2)), (int) (diameter / 2 * 0.65), pusX),
getPosY(jam * 30 + ((int) (menit / 2)), (int) (diameter / 2 * 0.65), pusY));
g.setColor(Color.red);
g.fillOval(pusX – 8, pusY – 8, 16, 16);
}
private int getPosX(int sudut, int panjang, int pos) {
int x = pos + (int) (Math.sin(Math.toRadians(sudut)) * panjang);
return x;
}
private int getPosY(int sudut, int panjang, int pos) {
int y = pos – (int) (Math.cos(Math.toRadians(sudut)) * panjang);
return y;
}
public static void main(String[] args) {
Frame fr = new Frame();
analog an = new analog();
fr.setTitle(“.:: Jam Analog ::.”);
fr.add(an);
fr.pack();
fr.addWindowListener(new WindowListener() {
public void windowOpened(WindowEvent e) {
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public void windowClosed(WindowEvent e) {
}
public void windowIconified(WindowEvent e) {
}
public void windowDeiconified(WindowEvent e) {
}
public void windowActivated(WindowEvent e) {
}
public void windowDeactivated(WindowEvent e) {
}
});
fr.setVisible(true);
}
}