Ctest1.java

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

 

 

 

 

 

 

 

 

 

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2013年01月16日 08:33
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。