dh-Materialien
Java Projekte
// JavaProject AnalogClock

// AnalogClock.java

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.BasicStroke;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.ArrayList;


class Canvas extends JPanel {
    private static final long serialVersionUID = 0L;
    int width, height;
    int xm, ym;

    private Timer t;

    Color colbgr = new Color(238,238,238);
    Color colhrs = new Color(80,80,80);
    Color colmin = new Color(80,80,80);
    Color colsec = new Color(150,20,20);
    Color colind = new Color(120,120,120);

    int cr = BasicStroke.CAP_ROUND;
    int jr = BasicStroke.JOIN_ROUND;

    ArrayList<BasicStroke> strokes; // ArrayList

    public Canvas() {
        strokes = new ArrayList<>();
        for (int i=0; i<6; i++) strokes.add(new BasicStroke(i, cr, jr));

        t = new Timer();
    }

    double cos(double angle) {
        return Math.cos(Math.toRadians(angle));
    }

    double sin(double angle) {
        return Math.sin(Math.toRadians(angle));
    }

    private void defineRendering(Graphics2D g) {
        RenderingHints rh;
        rh = new RenderingHints (
            RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON
            );
        g.setRenderingHints(rh);
    }

    protected void renewSize() {
        width = getBounds().width;
        height = getBounds().height;
        xm = (int) (width/2);
        ym = (int) (height/2);
    }

    private void drawHourIndices(Graphics2D g) {
        int x0, x1, y0, y1;
        double angle;
        g.setColor(colind);
        g.setStroke(strokes.get(3));
        for (int i=0; i<360; i+= 30) {
            angle = i;
            x0 = (int) (xm + 0.70*xm*cos(angle));
            y0 = (int) (ym + 0.70*ym*sin(angle));
            x1 = (int) (xm + 0.85*xm*cos(angle));
            y1 = (int) (ym + 0.85*ym*sin(angle));
            g.drawLine(x0, y0, x1, y1);
        }
    }

    private void drawMinuteIndices(Graphics2D g) {
        int x0, x1, y0, y1;
        double angle;
        g.setColor(colind);
        g.setStroke(strokes.get(2));
        for (int i=0; i<360; i+= 6) {
            angle = i;
            x0 = (int) (xm + 0.80*xm*cos(angle));
            y0 = (int) (ym + 0.80*ym*sin(angle));
            x1 = (int) (xm + 0.85*xm*cos(angle));
            y1 = (int) (ym + 0.85*ym*sin(angle));
            if (i%5 != 0) g.drawLine(x0, y0, x1, y1);
        }
    }

    private void drawHand(Graphics2D g, Color c, int s, double angle, double d) {
        g.setColor(c);
        g.setStroke(strokes.get(s));
        int x = (int)(xm + d*xm*cos(angle));
        int y = (int)(ym + d*ym*sin(angle));
        g.drawLine(xm, ym, x, y);
    }

    private void drawHourHand(Graphics2D g) {
        double angle = 30*t.hrs - 90 + (t.min + t.sec/60.0)/2.0;
        drawHand(g, colhrs, 5, angle, 0.5);
    }

    private void drawMinuteHand(Graphics2D g) {
        double angle = 6*t.min - 90;
        drawHand(g, colmin, 2, angle, 0.785);
    }

    private void drawSecondHand(Graphics2D g) {
        double angle = 6*t.sec - 90;
        drawHand(g, colsec, 1, angle, 0.785);
        g.fillOval(xm-6, ym-6, 12, 12);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        defineRendering(g2d);
        g2d.setBackground(colbgr);

        drawHourIndices(g2d);
        drawMinuteIndices(g2d);
        drawHourHand(g2d);
        drawMinuteHand(g2d);
        drawSecondHand(g2d);

        g2d.dispose();
    }
}

class Frame extends JFrame {
    private static final long serialVersionUID = 0L;
    Image icon;

    public Frame() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(349, 301);
        setLocationRelativeTo(null);
        setTitle(" ");
        icon = Toolkit.getDefaultToolkit().getImage("dh.png");
        setIconImage(icon);
    }
}


class Clockwork implements Runnable {
    Frame frame;
    Canvas canvas;
    Thread thread;

    public Clockwork() {
        frame = new Frame();
        canvas = new Canvas();
        frame.add(canvas);
        frame.setVisible(true);
        thread = new Thread(this);
        thread.start();
    }

    @Override
    public void run() {
        while (true) {
            canvas.renewSize();
            canvas.repaint();

            try {
                Thread.sleep(10);
            }
            catch (InterruptedException e) { }
        }
    }
}


public class AnalogClock {
    public static void main(String[] args) {
        new Clockwork();
    }
}



// Timer.java

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Timer implements Runnable {
    GregorianCalendar calendar;
    int hrs, min, sec, msc;
    Thread thread;

    @Override
    public void run() {
        while (true) {
            getActualTime();
            try {
                Thread.sleep(1000);
            }
            catch (InterruptedException e) { }
        }
    }

    public void getActualTime() {
        calendar = new GregorianCalendar();
        hrs = calendar.get(Calendar.HOUR_OF_DAY);
        min = calendar.get(Calendar.MINUTE);
        msc = calendar.get(Calendar.MILLISECOND);
        sec = (int) Math.round(calendar.get(Calendar.SECOND)+msc/1000.0);
    }

    public Timer() {
        thread = new Thread(this);
        thread.start();
    }
}

Download AnalogClock