자바를 잘아시는 고수님들께 부탁드립니다..
통꽃
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.util.Calendar;
interface Timed {
public void tick(Timer t);
}
class Timer extends Thread {
private Timed target;
private int interval;
public Timer(Timed t, int i) {
target = t; interval = i;
setDaemon(true);
}
public void run() {
while (true) {
try {
sleep(interval);
target.tick(this);
}
catch(InterruptedException e) {}
finally{
}
}
}
}
public class TimerTest extends Frame {
public TimerTest() {
setLayout(new GridLayout(2, 3));
add(new ClockCanvas(Seoul, 16));
add(new ClockCanvas(Chicago, 1));
add(new ClockCanvas(London, 7));
add(new ClockCanvas(Moscow, 10));
add(new ClockCanvas(Paris, 8));
add(new ClockCanvas(Beijing, 15));
}
public static void main(String[] args) {
Frame f = new TimerTest();
f.setSize(450, 300);
f.setBackground(Color.gray);
WindowDestroyer listener = new WindowDestroyer();
f.addWindowListener(listener);
f.setVisible(true);
}
}
class ClockCanvas extends Canvas implements Timed {
public int baseX = 10;
public int baseY = 10;
public int clockW = 100;
public int clockH = 100;
public int center = baseX + clockH/2;
private int seconds = 0;
private String city;
private int offset;
private final int LOCAL = 16;
private int timeNumberDist = 10; //값이 증가할수록 가운데 점에 가까워짐
public ClockCanvas(String c, int off) {
city = c; offset = off;
new Timer(this, 1000).start();
setSize(125, 125); // 시계의 크기
}
public void paint(Graphics g) {
g.setColor(Color.white); // 시계의 바탕색
g.fillOval(baseX,baseY, clockW, clockH);
double hourAngle = 2 * Math.PI * (seconds - 3 * 60 * 60) / (12 * 60 * 60); //시간에 해당하는 위치 각
double minuteAngle = 2 * Math.PI * (seconds - 15 * 60) / (60 * 60); // 분에 해당하는 위치 각
double secondAngle = 2 * Math.PI * (seconds - 15) / 60; //초에 해당하는 위치의각
System.out.println(hourAngle : + hourAngle);
System.out.println(minuteAngel : + minuteAngle);
System.out.println(secondAngle : + secondAngle);
g.setColor(Color.black);
g.drawLine(center, center, center + (int)(30 * Math.cos(hourAngle)),
center + (int)(30 * Math.sin(hourAngle)));
g.drawLine(center, center, center + (int)(40 * Math.cos(minuteAngle)),
center + (int)(40 * Math.sin(minuteAngle)));
g.setColor(Color.blue);
g.drawLine(center, center, center + (int)(45 * Math.cos(secondAngle)),
center + (int)(45 * Math.sin(secondAngle)));
g.setColor(Color.black);
g.drawString(city, baseX, baseY+clockH+10);
g.drawString(12,baseX+43,baseY+timeNumberDist); //시계의 12시 부분을 표시
g.drawString(3,baseX+100-timeNumberDist,baseY+55); // 시계의 3시 부분을 표시
g.drawString(6,baseX+47,baseY+110-timeNumberDist); // 시계의 6시 부분을 표시
g.drawString(9,baseX-10+timeNumberDist,baseY+55); // 시계의 9시 부분을 표시
}
public void tick(Timer t) {
//추가 부분입니다. ★★★★★
Calendar cal = Calendar.getInstance();
//추가 부분입니다. ★★★★★
seconds = ((cal.get(Calendar.HOUR) - LOCAL + offset)* 60 * 60) +
(cal.get(Calendar.MINUTE) * 60) + cal.get(Calendar.SECOND);
System.out.println(tick 메소드입니다.seconds : + seconds);
System.out.println(offset : + offset);
System.out.println(LOCAL : + LOCAL);
System.out.println(HOUR : + cal.get(Calendar.HOUR_OF_DAY ));
System.out.println(Calendar.MINUTE * 60 : + (cal.get(Calendar.MINUTE) * 60));
System.out.println(Calendar.SECOND : + cal.get(Calendar.SECOND));
//System.out.println(getTime : + Calendar.getTime() );
repaint();
}
}
class WindowDestroyer extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
위에는 아날로그 시계입니다...위에 소스에 대한....자세한 주석은 아니지만..
대충이라도 어느 부분은 어떤 작용을 하는 지..틀만이라도 잡아서 주석을 달아주시면 감사하겠습니당..ㅠ.ㅠ
자바에 대해 공부하고있는데 아는게 없으니 전혀 이해를 못하겠네요..ㅠ.ㅠ
부탁드리겠습니당.
-
징징몬
Api를 참고하세여 ^^