Anzeige erneuern, wie geht das?

java starter

Mitglied
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 :)

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

java starter

Mitglied
Danke für die schnelle Antwort... :)

Ja, das habe ich mir schon gedacht, nur war der Timer schon vorgegeben und ich weiß nicht, wie ich den Text des JLabels erneue, weil der Befehlt repaint wird wohl eher nicht funktionieren ;)

Ach und zu den Berechnungen im Zeichencode: Kannst du mir sagen, von welcher Zeile du da sprichst? :)

LG
 

Volvagia

Top Contributor
Mit #setText(String). ;)
repaint wird funktionieren, nur da Strings immuntable sind wirst du keinen anderen Text bekommen.

Ich meinte besonders die Berechnungen unter "// Zeigerposition berechnen". Da der EDT bei jeder Kleinigkeit mit Events bombardiert wird muss man ihm nicht auch noch mit Gleitkommaberechnungen aufhalten. ^^ Ich würde dem Timer es zuerst berechnen lassen (ebenso die Zeit und sie gleichzeitig für Analog- und Digitaluhr verwenden), setzen und dann erst repaint aufrufen.
 

java starter

Mitglied
Perfekt, jetzt funktionierst, danke!! :)

Zwei Fragen habe ich noch;
Wenn du in den Quelltext schaust, hast du die Anzeige des JLabel, das mit ganz vielen Leerzeichen beginnt, dass ich die digitale Anzeige in die Mitte rücke, geht das mit EINFACHEN Mitteln auch anders?

Und bei der Anzeige des JLabels benuze ich die Zahlen stunden, minuten und sekunden, die sind jedoch in der Klasse ZeichenPanel definiert, also habe ich sie nochmals definiert, geht das auch eleganter?
Habs schon mit ZeichenPanel.stunden probiert, aber das geht iwie nicht!

LG
 

Volvagia

Top Contributor
aendern.setHorizontalAlignment(SwingConstants.CENTER);

Du könntest ja z. B. setter dafür schreiben:

Java:
Timer t = new Timer(1000, new ActionListener() {
	public void actionPerformed(ActionEvent e) {
		recalculateClocks();
	}
});

private static void recalculateClocks() {
	long sekunden = (System.currentTimeMillis() / 1000) % 60;
	long minuten = (System.currentTimeMillis() / 1000) % 3600;
	long stunden = (System.currentTimeMillis()/1000) %(43200);
	
	String digitalText = (stunden / 3600) + ":" + (minuten / 60) + ":" + sekunden;
	
	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);
	
	panel.setSekundenZeigerSinus(zeiger_x);
	panel.setSekundenZeigerCoSinus(zeiger_y);
	
	panel.setMinutenZeigerSinus(zeiger_x1);
	panel.setMinutenZeigerCoSinus(zeiger_y1);
    
	panel.setStundenZeigerSinus(zeiger_x2);
	panel.setStundenZeigerCoSinus(zeiger_y2);
	
	panel.repaint();
	aendern.setText(digitalText);
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
Z Fehler Zeiterfassungsprogramm Anzeige Java Basics - Anfänger-Themen 3
W Wiederkehrende Konsolen-Anzeige mit do-While?! Java Basics - Anfänger-Themen 33
Elyt Würfel mit bildlicher Anzeige Java Basics - Anfänger-Themen 2
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
A Anzeige Fehler auf anderem Gerät Java Basics - Anfänger-Themen 1
T Anzeige, wie lange es noch dauert bis ein File gesendet ist. Java Basics - Anfänger-Themen 2
Hijo2006 Anzeige eines Bildes in JAR Java Basics - Anfänger-Themen 12
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
TheSorm Anzeige fehler eines Buttons Java Basics - Anfänger-Themen 3
C Erste Schritte Berechnen einer Form mit Live anzeige.... Java Basics - Anfänger-Themen 4
H pdf-Anzeige Java Basics - Anfänger-Themen 11
S ListModel - Anzeige im JList Java Basics - Anfänger-Themen 4
FetterOtter JTable: ToolTipText-Anzeige abhängig von Zellengröße und Textlänge Java Basics - Anfänger-Themen 2
S Probleme bei der Gui Anzeige Java Basics - Anfänger-Themen 11
S JPanel anzeige Java Basics - Anfänger-Themen 2
K Erste Schritte prob anzeige Java Basics - Anfänger-Themen 4
P Labyrinth, Backtracking, verzögerte Anzeige Java Basics - Anfänger-Themen 15
G JTextField() Anzeige - if-Anweisungen Java Basics - Anfänger-Themen 2
1 Combobox anzeige Java Basics - Anfänger-Themen 7
F grafische Anzeige von Werten Java Basics - Anfänger-Themen 2
D DB Anzeige der Treffer Java Basics - Anfänger-Themen 12
Weiti Anzeige von komponenten erst bei Mouse-Over Java Basics - Anfänger-Themen 3
S Zeitpunkt für die Anzeige von setBackground Java Basics - Anfänger-Themen 2
H Klassen zur Anzeige ines Bildes und zum Zeichnen innerhalb diese Bildes Java Basics - Anfänger-Themen 2
B double Rundungsfehler od. Anzeige-Fehler? Java Basics - Anfänger-Themen 4
D GUI Anzeige fehlt Java Basics - Anfänger-Themen 4
C Probleme mit Exportieren einer jar-datei /keine Anzeige mehr Java Basics - Anfänger-Themen 5
hdi Konsole basteln -> wie die Anzeige des Inhalts realiseren Java Basics - Anfänger-Themen 3
B Arbeitsspeicher-Verbrauch bei Anzeige eines 10MP-Bildes Java Basics - Anfänger-Themen 11
G Problem mit Anzeige der Tabelle Java Basics - Anfänger-Themen 3
G Ebenen Verwaltung und Anzeige Problem Java Basics - Anfänger-Themen 6
G JFileChooser - Anzeige beschleunigen Java Basics - Anfänger-Themen 2
O Anzeige von Zeichen in einer JList Java Basics - Anfänger-Themen 5
G 9-Segment-Anzeige Java Basics - Anfänger-Themen 7
B Java - Anzeige beim Refresh weiss Java Basics - Anfänger-Themen 11
T Keine Anzeige in JList Java Basics - Anfänger-Themen 18
B unvollständige Anzeige von JComboBox Werten Java Basics - Anfänger-Themen 5
C Taschenrechner -> Anzeige/Variablen Problem Java Basics - Anfänger-Themen 9
S JTextArea Problem mit Anzeige Java Basics - Anfänger-Themen 2
A Datei einlesen und Inhalt in verschidenen JList anzeige? Java Basics - Anfänger-Themen 3
G Array anzeige nur letzter wert Java Basics - Anfänger-Themen 2
M Keine Anzeige, wenn ich die Classe umbenenne Java Basics - Anfänger-Themen 13
V Problem mit der Anzeige einer paint-Methode in einem Panel Java Basics - Anfänger-Themen 2
G Problem mit JPanel, bekomme keine Anzeige! Java Basics - Anfänger-Themen 4
I Classpath Anzeige Java Basics - Anfänger-Themen 4
G Probleme mit erneuern des Wertes in JSpinner Java Basics - Anfänger-Themen 9
W ein JLabel oder JTextfield in einem Canvas-Kontext einbringen : geht das ? Java Basics - Anfänger-Themen 4
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
Ostkreuz wie geht der catch? Java Basics - Anfänger-Themen 3
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
S IntelliJ geht alle Klassen durch Java Basics - Anfänger-Themen 9
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
Say Stelle in Code herausfinden, wie geht man vor? Java Basics - Anfänger-Themen 12
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
P Installation JRE 8u321 startet, geht aber nicht weiter Java Basics - Anfänger-Themen 1
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
E Pervasive PSQL insert funktion geht nicht Java Basics - Anfänger-Themen 9
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
H Wie geht eigentlich Objektorientierung? Java Basics - Anfänger-Themen 14
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
melisax Lower & Uppercase Beispielprogramm geht nicht Java Basics - Anfänger-Themen 3
MarcKKKK123 Wie geht das? Java Basics - Anfänger-Themen 1
B Static Attribute in einer Klasse, wie geht das? :O Java Basics - Anfänger-Themen 19
N methodenaufruf for each geht nicht Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
W App geht live und dann? Java Basics - Anfänger-Themen 9
P Geht es vielleicht viel kürzer? Java Basics - Anfänger-Themen 7
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
K Erste Schritte Programm geht aus Schleife, warum? Java Basics - Anfänger-Themen 2
S Geht das bei Java ? Java Basics - Anfänger-Themen 11
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
B OCR - Rechnungserkennung, wie geht das genau? Java Basics - Anfänger-Themen 59
CptK Klassen KeyListner geht nicht Java Basics - Anfänger-Themen 7
L Klassen Objekt aus einer Warteschlange in eine andere übergeben, geht nicht? Java Basics - Anfänger-Themen 6
K Armstrong Programm geht nur bis 1000, aber nicht weiter Java Basics - Anfänger-Themen 2
M Nim-Spiel geht in den negativen Bereich Java Basics - Anfänger-Themen 1
amazinglife77 Input/Output Lesen/Schreiben Properties: in eclipse geht, als JAR nicht Java Basics - Anfänger-Themen 4
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
MR._FIRE_Flower String.split("(") geht nicht Java Basics - Anfänger-Themen 4
M Restbuchwert Berechnung geht nicht Java Basics - Anfänger-Themen 45
K Klassen Nachträglich ein Objekt einem anderen zuweisen, geht das? Java Basics - Anfänger-Themen 2
S int addieren geht nicht Java Basics - Anfänger-Themen 13
L system.print.out geht nicht Java Basics - Anfänger-Themen 11
M Referenz geht bei Zwischenspeichern verloren (ArrayList) Java Basics - Anfänger-Themen 4
S Komma geht beim Schreiben ins csv verloren. Java Basics - Anfänger-Themen 6
M Arrays einspeichern geht nicht Java Basics - Anfänger-Themen 21
J BlueJ und import-Anweisungen, wie geht das? Java Basics - Anfänger-Themen 4
J Geht mit Java überhaupt was? Java Basics - Anfänger-Themen 13
J Debuggen - wie geht das? Java Basics - Anfänger-Themen 6
I erstelle Vorschaubild mit der lib PDF-Renderer und möchte danach Dateiname ändern -> geht aber nicht Java Basics - Anfänger-Themen 0
J Ausführen geht nicht Java Basics - Anfänger-Themen 19
G System.out.printf geht nicht Java Basics - Anfänger-Themen 6
E Erste Schritte [Noob] Warum geht meine For-Schleife nicht? Java Basics - Anfänger-Themen 2
I Java Code so gut es geht Kommentieren Java Basics - Anfänger-Themen 4
S Button "Berechnen" geht nicht Java Basics - Anfänger-Themen 3
B Compiler-Fehler Ein Java-Eclipse-Anfänger geht auf Reisen... Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben