자바로 아날로그 시계 만들기 소스에 대해 질문....

자바로 아날로그 시계 만들기 소스에 대해 질문....

작성일 2003.12.02댓글 1건
    게시물 수정 , 삭제는 로그인 필요

자바로 세계 6개국의 아날로그 시계를 만드는 소스거든요?;;

제가 짠게 아니고...강의자료에 있는 예제 소스를 그대로 갖다붙인건데.

시계 그림은 나오는데...
시계가 돌아가질 않네요.

소스를 아무리 봐도 어디서 문제인건지 알 수 없어요..ㅜㅜ

어떤 이유 때문에 시계가 계속 같은 그림만 repaint되는거 같아 보이는데;;

이유가 뭔지...그리고 제대로 돌아가려면 어떻게 수정해야 하는지 좀 알려주시면 정말 감사하겠네요..^-^;



import java.awt.*;
import java.awt.event.*;
import java.util.*;

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); }
catch(InterruptedException e) {}
target.tick(this);
}
}


}

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 ClockCanvas(String c, int off)
{
city = c; offset = off;
new Timer(this, 1000).start();
setSize(125, 125); }
public int baseX = 10;
public int baseY = 10;
public int clockW = 100;
public int clockH = 100;
public int center = baseX + clockH/2;
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;
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); }

public void tick(Timer t)
{
seconds = (Calendar.HOUR - LOCAL + offset)* 60 * 60 +
Calendar.MINUTE * 60 + Calendar.SECOND;
repaint();
}

private int seconds = 0;
private String city;
private int offset;
private final int LOCAL = 16;
}

class WindowDestroyer extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}



profile_image 익명 작성일 -

밑에 부분 조금 수정했어요.. 시간 구하는 부분요..

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;


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);
}

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);
}
}

정보통신 인터넷 전문용어

... 예를 들면, 자바로 만들어진 애플릿들은 자바와... 있는 아날로그 신호로 바꿔주는 속도를 나타낸다.... 주제에 대해 사용자들이 가장 많이 질문하는 내용들과 이에...

인터넷 용어

... 예를 들면, 자바로 만들어진 애플릿들은 자바와... 있는 아날로그 신호로 바꿔주는 속도를 나타낸다.... 주제에 대해 사용자들이 가장 많이 질문하는 내용들과 이에...

인터넷용어와 도메인등에 대한 정확한...

... 예를 들면, 자바로 만들어진 애플릿들은 자바와... 있는 아날로그 신호로 바꿔주는 속도를 나타낸다.... 주제에 대해 사용자들이 가장 많이 질문하는 내용들과 이에...

컴퓨터 용어뜻 좀 가르쳐주세여

토글키--> 다단---> DPI--> BPS--> nanosecond--> 아날로그--> SOHO... 예를 들면, 자바로 만들어진 애플릿들은 자바와... 주제에 대해 사용자들이 가장 많이 질문하는 내용들과 이에...

인터넷 용어

... 예를 들면, 자바로 만들어진 애플릿들은 자바와... 있는 아날로그 신호로 바꿔주는 속도를 나타낸다. 하지만... 주제에 대해 사용자들이 가장 많이 질문하는 내용들과...

컴퓨터, 인터넷, 통신 만들떄 어울리는...

... 예를 들면, 자바로 만들어진 애플릿들은 자바와... 있는 아날로그 신호로 바꿔주는 속도를 나타낸다.... 주제에 대해 사용자들이 가장 많이 질문하는 내용들과 이에...

컴퓨터 관련(IT) 용어 20개 알려주세요

... 되도록 빨리 올려주세요 추가질문,, 그리고 컴퓨터... A/D Converter 아날로그 형태의 데이터나 신호를 컴퓨터... Applet 썬마이크로시스템 사가 웹 커뮤니티에 자바를...

인터넷 용어들

... 예를 들면, 자바로 만들어진 애플릿들은 자바와... 있는 아날로그 신호로 바꿔주는 속도를 나타낸다.... 주제에 대해 사용자들이 가장 많이 질문하는 내용들과 이에...