//import java.awt.*;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import java.util.Calendar;
public class AClock2 extends JFrame {
final int f_width = 400;
final int f_height = 430;
final int r = 180;
final int x_0 = 20;
final int y_0 = 40;
final int x_c = x_0+r+1;
final int y_c = y_0+r+1;
public AClock2() {
super("アナログ時計");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(f_width, f_height);
this.setVisible(true);
java.util.TimerTask task = new java.util.TimerTask() {
public void run() {
repaint(); //一秒ごとに再描画
}
};
java.util.Timer timer = new java.util.Timer();
timer.schedule(task, 0L, 1000L);
}
public void paint(Graphics g){
//背景の描画
g.setColor(Color.white);
g.fillRect(0, 0, f_width, f_height);
//時計の描画
g.setColor(Color.green);
g.drawOval(x_0, y_0, r*2+1, r*2+1);
g.fillRect(x_c-4, y_c-4, 9, 9);
for(int i=-84, j=1; i<=270; i+=6){
g.setColor(Color.green);
double x=r*Math.cos(Math.toRadians(i));
double y=r*Math.sin(Math.toRadians(i));
if(i%30==0){
double x2=(r-15)*Math.cos(Math.toRadians(i));
double y2=(r-15)*Math.sin(Math.toRadians(i));
g.drawLine(x_c+(int)x, y_c+(int)y, x_c+(int)x2,
y_c+(int)y2);
double x3=(r-25)*Math.cos(Math.toRadians(i));
double y3=(r-25)*Math.sin(Math.toRadians(i));
g.setColor(Color.magenta);
g.drawString(""+j, x_c+(int)x3-5, y_c+(int)y3+5);
j++;
}else{
double x2=(r-7)*Math.cos(Math.toRadians(i));
double y2=(r-7)*Math.sin(Math.toRadians(i));
g.drawLine(x_c+(int)x, y_c+(int)y, x_c+(int)x2,
y_c+(int)y2);
}
}
//針の描画
Calendar time = Calendar.getInstance();
int s = time.get(time.SECOND)*6-90; //秒針の角度
int sl = r-15; //秒針の長さ
double slx = sl*Math.cos(Math.toRadians(s));
double sly = sl*Math.sin(Math.toRadians(s));
g.setColor(Color.pink);
g.drawLine(x_c, y_c, x_c+(int)slx, y_c+(int)sly);
int m = (time.get(time.MINUTE)*6+time.get(time.SECOND)/10)-90;
//分針の角度、「/10」の部分は「/60*6」から
int ml = r-30;
//分針の長さ
double mlx = ml*Math.cos(Math.toRadians(m));
double mly = ml*Math.sin(Math.toRadians(m));
g.setColor(Color.red);
g.drawLine(x_c, y_c, x_c+(int)mlx, y_c+(int)mly);
int h = (time.get(time.HOUR_OF_DAY)*30+time.get(time.MINUTE)/2)-90;
//時針の角度、「/2」の部分は「/12*6」から
int hl = r*4/7;
//時針の長さ
double hlx = hl*Math.cos(Math.toRadians(h));
double hly = hl*Math.sin(Math.toRadians(h));
g.setColor(Color.blue);
g.drawLine(x_c, y_c, x_c+(int)hlx, y_c+(int)hly);
}
public static void main(String args[]){
new AClock2();
}
}