Uhrzeit umstellen

jakomadred

Mitglied
Hallo Leute, ich versuche Digitale Uhr zu erstellen zuerst habe ich ein Programm für die Uhr geschrieben und hat geklappt aber ich konnte mein Programm nicht erweitern ( ich muss mit Button die Uhr umstellen )
ich habe im Internet dieses Programm gefunden aber das ist leider kein Digitale Uhr . ich habe versucht dieses Programm zu bearbeiten aber konnte nicht schaffen es gibt immer fehlermeldung
kann jemand mir helfen, ich will dieses Program als Digitale Uhr erstellen
ich werde mein Programm in einem Komenntare schreiben
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.*;
import javax.swing.*;
import javax.swing.event.*;

public class ClockGUI {
    public static void main(String[] args) {
        ClockDrawingFrame frame = new ClockDrawingFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

/**
 * A frame with two text fields to set a clock.
 */
class ClockDrawingFrame extends JFrame {
    private JTextField hourField;
    private JTextField minuteField;
    private ClockPanel clock;

    public ClockDrawingFrame() {
        setTitle("Clock GUI");

        DocumentListener listener = new ClockFieldListener();

        // add a panel with text fields (label)

        JPanel panel = new JPanel();

        panel.add(new JLabel("Hours:"));
        hourField = new JTextField("12", 3);
        panel.add(hourField);
        hourField.getDocument().addDocumentListener(listener);

        panel.add(new JLabel("Minutes:"));
        minuteField = new JTextField("00", 3);
        panel.add(minuteField);
        minuteField.getDocument().addDocumentListener(listener);

        add(panel, BorderLayout.SOUTH);

        // add the clock

        clock = new ClockPanel();
        add(clock, BorderLayout.CENTER);
        pack();
    }

    /**
     * Set the clock to the values stored in the text fields.
     */
    public void setClock() {
        try {
            int hours = Integer.parseInt(hourField.getText().trim());
            int minutes = Integer.parseInt(minuteField.getText().trim());
            clock.setTime(hours, minutes);
        } catch (NumberFormatException e) {
        }
        // don't set the clock if the input can't be parsed
    }

    private class ClockFieldListener implements DocumentListener {
        public void insertUpdate(DocumentEvent event) {
            setClock();
        }

        public void removeUpdate(DocumentEvent event) {
            setClock();
        }

        public void changedUpdate(DocumentEvent event) {
        }
    }
}

/**
 * A panel that draws a clock.
 */
class ClockPanel extends JPanel {
    private double minutes = 0;
    private int RADIUS = 100;
    private double MINUTE_HAND_LENGTH = 0.8 * RADIUS;
    private double HOUR_HAND_LENGTH = 0.6 * RADIUS;
    
    public ClockPanel() {
        setPreferredSize(new Dimension(2 * RADIUS + 1, 2 * RADIUS + 1));
    }

    public void paintComponent(Graphics g) {
        // draw the circular boundary

        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D) g;
        Ellipse2D circle = new Ellipse2D.Double(0, 0, 2 * RADIUS, 2 * RADIUS);
        g2.draw(circle);

        // draw the hour hand

        double hourAngle = Math.toRadians(90 - 360 * minutes / (12 * 60));
        drawHand(g2, hourAngle, HOUR_HAND_LENGTH);

        // draw the minute hand

        double minuteAngle = Math.toRadians(90 - 360 * minutes / 60);
        drawHand(g2, minuteAngle, MINUTE_HAND_LENGTH);
    }

    public void drawHand(Graphics2D g2, double angle, double handLength) {
        Point2D end = new Point2D.Double(RADIUS + handLength * Math.cos(angle),
                RADIUS - handLength * Math.sin(angle));
        Point2D center = new Point2D.Double(RADIUS, RADIUS);
        g2.draw(new Line2D.Double(center, end));
    }

    /**
     * Set the time to be displayed on the clock
     *
     * @param h hours
     * @param m minutes
     */
    public void setTime(int h, int m) {
        minutes = h * 60 + m;
        repaint();
    }


}
 
Java:
package com.company;
import java.awt.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
public class myfarme extends JFrame{
    Calendar calendar;
    SimpleDateFormat timeFormat;
    JLabel timeLabel;
    String time;
    myfarme()
    {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Clock Program");
        this.setLayout(new FlowLayout());
        this.setSize(350,200);
        this.setResizable(false);

        timeFormat = new SimpleDateFormat("hh:mm a");
        timeLabel = new JLabel();
        timeLabel.setFont(new Font("Verdana",Font.PLAIN,50));
        timeLabel.setForeground(new Color(0x00FF00));
        timeLabel.setBackground(Color.black);
        timeLabel.setOpaque(true);
        this.add(timeLabel);
        this.setVisible(true);
        setTime();
    }

    public void setTime() {
        while(true) {
            time = timeFormat.format(Calendar.getInstance().getTime());
            timeLabel.setText(time);

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
 
Also erst einmal ist das, was Du da gefunden hast, nichts, das Dir bei Deinem Programm helfen könnte, denn da geht es ja nur um eine Applikation, die eine analoge Uhr zeichnet (was Du explizit nicht willst).

Bei deiner Applikation ist das Problem, dass Du den Thread, der auch das Fenster zeichnen soll, blockierst. Hier würde ich Dir raten, Dich erst einmal mit den Grundlagen vertraut zu machen, die Du z.B. unter https://openbook.rheinwerk-verlag.de/javainsel9/javainsel_19_026.htm finden kannst.

Das regelmäßige Ausführen von Aktionen findet sich dann auch zwei Abschnitte weiter:
 

Zurück
Oben