import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;

public class VintagePocketWatch extends JPanel implements ActionListener {

    private Timer timer;

    public VintagePocketWatch() {
        this.setPreferredSize(new Dimension(400, 400));
        timer = new Timer(1000, this); // обновление каждую секунду
        timer.start();
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        // Отрисовка циферблата
        g.setColor(new Color(222, 184, 135)); // Светло-коричневый цвет для циферблата
        g.fillOval(50, 50, 300, 300);

        // Отрисовка золотой кромки
        g.setColor(new Color(255, 215, 0)); // Золотой цвет
        g.drawOval(50, 50, 300, 300); // Кромка циферблата

        // Римские цифры для меток
        String[] romanNumerals = {"XII", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI"};

        // Отрисовка римских цифр
        for (int i = 0; i < 12; i++) {
            double angle = Math.toRadians(i * 30); // 30 градусов между метками
            int x = (int) (200 + 100 * Math.cos(angle - Math.PI / 2)); // Положение по X
            int y = (int) (200 + 100 * Math.sin(angle - Math.PI / 2)); // Положение по Y

            // Установка шрифта для римских цифр
            g.setFont(new Font("Serif", Font.BOLD, 20));
            FontMetrics fm = g.getFontMetrics();
            int textWidth = fm.stringWidth(romanNumerals[i]);
            int textHeight = fm.getHeight();
            // Вычисляем позицию для центрирования текста
            g.drawString(romanNumerals[i], x - textWidth / 2, y + textHeight / 2);
        }

        // Получение текущего времени
        Calendar cal = Calendar.getInstance();
        int hour = cal.get(Calendar.HOUR_OF_DAY) % 12;
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);

        // Угол для стрелок
        double hourAngle = Math.toRadians(hour * 30 + minute * 0.5); // 30° за час + 0.5° за минуту
        double minuteAngle = Math.toRadians(minute * 6); // 6° за минуту
        double secondAngle = Math.toRadians(second * 6); // 6° за секунду

        // Отрисовка стрелок часов
        g.setColor(Color.BLACK);
        g.drawLine(200, 200, (int) (200 + 60 * Math.cos(hourAngle - Math.PI / 2)), (int) (200 + 60 * Math.sin(hourAngle - Math.PI / 2)));
        g.drawLine(200, 200, (int) (200 + 90 * Math.cos(minuteAngle - Math.PI / 2)), (int) (200 + 90 * Math.sin(minuteAngle - Math.PI / 2)));
        g.setColor(Color.RED);
        g.drawLine(200, 200, (int) (200 + 100 * Math.cos(secondAngle - Math.PI / 2)), (int) (200 + 100 * Math.sin(secondAngle - Math.PI / 2)));
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        repaint(); // Перерисовка панели каждую секунду
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Vintage Pocket Watch");
        VintagePocketWatch watch = new VintagePocketWatch();
        frame.add(watch);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
} Сделай в середине циферблата дополнительный декоративный механизм состоящий из 5 шестеренок соединённых между собой, который будут анимированы вращением