Ich hab eine Uhr als GUI programmiert, durch zeichnen eines kreises und anbringen von Sekunden-, Minuten- und Stundenzeigern;
Dies hat geklappt;
Dann habe ich ein Button gemacht, durch dessen Betätigen die digitale Anzeige der Uhr erscheint, hat auch geklappt Nur mein Problem ist... Wenn ich den jetzt betätige, zeigt es von mir aus 11:58:47 an, aber es aktualisiert sich nicht, wie bekomme ich das mit wenig Aufwand hin?
Ich weiß mein Programmierstil ist hier sehr rustikal, ich hoffe ihr könnt darüber hinwegsehen
Dies hat geklappt;
Dann habe ich ein Button gemacht, durch dessen Betätigen die digitale Anzeige der Uhr erscheint, hat auch geklappt Nur mein Problem ist... Wenn ich den jetzt betätige, zeigt es von mir aus 11:58:47 an, aber es aktualisiert sich nicht, wie bekomme ich das mit wenig Aufwand hin?
Ich weiß mein Programmierstil ist hier sehr rustikal, ich hoffe ihr könnt darüber hinwegsehen
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
// Ein Panel zum Zeichnen
class ZeichenPanel extends JPanel {
public void paintComponent(Graphics g) {
// aktuellen Sekundenwert der Systemuhr berechnen
long sekunden = (System.currentTimeMillis() / 1000) % 60;
long minuten = (System.currentTimeMillis() / 1000) % 3600;
long stunden = (System.currentTimeMillis()/1000) %(43200);
// Zeigerposition berechnen
double zeiger_x = Math.sin(sekunden/60.0 * 2*Math.PI);
double zeiger_y = Math.cos(sekunden/60.0 * 2*Math.PI);
double zeiger_x1 = Math.sin(minuten/3600.0 * 2*Math.PI);
double zeiger_y1 = Math.cos(minuten/3600.0 * 2*Math.PI);
double zeiger_x2 = Math.sin(stunden/43200.0 * 2*Math.PI);
double zeiger_y2 = Math.cos(stunden/43200.0 * 2*Math.PI);
// alte Zeiger löschen
g.clearRect(0, 0, getWidth(), getHeight());
// Uhrumrandung zeichnen
g.drawOval(10, 10, 180, 180);
// Sekundenzeiger zeichnen
g.drawLine(100, 100, 100+(int)(zeiger_x*80), 100-(int)(zeiger_y*80));
//Minutenzeiger zeichnen
g.drawLine(100, 100, 100+(int)(zeiger_x1*70), 100-(int)(zeiger_y1*70));
// Stundenzeiger zeichnen
g.drawLine(100, 100, 100+(int)(zeiger_x2*50), 100-(int)(zeiger_y2*50));
g.drawString("12",95,28);
g.drawString("6",97,181);
g.drawString("9",16,105);
g.drawString("3",178,105);
}
}
// Die Hauptklasse Uhr
public class Uhr {
// Variable für das Zeichenpanel
static ZeichenPanel panel;
static JButton analogdigital;
static JLabel aendern;
public static void main(String[] args) {
// Fenster einrichten
JFrame frame = new JFrame("Uhr");
frame.setSize(610, 250);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Zeichenpanel anlegen
panel = new ZeichenPanel();
frame.add(panel);
frame.setLayout(new GridLayout());
analogdigital = new JButton("Wechsel Analog/Digital");
frame.getContentPane().add(analogdigital);
aendern = new JLabel("",10);
frame.getContentPane().add(aendern);
analogdigital.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
long sekunden = (System.currentTimeMillis() / 1000) % 60;
long minuten = (System.currentTimeMillis() / 1000) % 3600;
long stunden = (System.currentTimeMillis()/1000) %(43200);
aendern.setText(" "+stunden/3600+":"+minuten/60+":"+sekunden);
}
}
);
// Timer, löst alle 1000 Millisekunden eine neue Anzeige des Panels aus
Timer t = new Timer(1000,
new ActionListener() {
public void actionPerformed(ActionEvent e) {
panel.repaint();
}
}
);
t.start(); // Timer starten
// Fenster sichtbar machen...
frame.setVisible(true);
}
}