Digitale Uhr

Status
Nicht offen für weitere Antworten.

möbi

Mitglied
Ich bin gerade dabei mich privat in Java einzuarbeiten und habe mir da so ein kleines Beispielprojekt in Form einer Zeiterfassung geschaffen. Auf dem Login-Screen würde ich gerne in der Statusleiste die aktuelle Systemzeit ausgeben. Also eine digitale Uhr, die mir Tag, Datum, Jahr, Stunde, Minute und Sekunde ausgibt. Die Zeit soll die Uhr vom Betriebssystem holen.

Hab eben gerade schonmal gegoogelt, aber wirklich gefunden habe ich nicht das, was ich wollte. Bin jetzt soweit, dass ich die Zeit zwar einmal abgerufen kriege und sie dann dargestellt wird, aber von dynamisch kann da irgendwie keine Rede sein ;)

Code:
Calendar cal = Calendar.getInstance(TimeZone.getDefault());
String dateFormat = "yyyy-MM-dd HH:mm:ss";
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(dateFormat);
sdf.setTimeZone(TimeZone.getDefault());
String currentTime = sdf.format(cal.getTime());

Uhrzeit = new JLabel(currentTime);

Vielen Dank schonmal für eure Hilfe.
 

The_S

Top Contributor
Du musst die Uhrzeit in einem Thread in einer Schleife immer wieder aktualisieren. Kannst dich ja mal zum Thema Threads einlesen und wenn du dann noch Fragen hast dich nochmal melden :) .
 

JPKI

Top Contributor
Ich würde dir raten, das ganze in nem Thread in 'ner Schleife laufen zu lassen.
Code:
new Thread(new Runnable() {
 public void run() {
 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 uhrzeit.setText(format.format(new java.util.Date()));
}}).start();

Vorrausgesetzt, das JLabel wurde vorher bereits initialisiert...
 

The_S

Top Contributor
Du kannst den neuen Thread ja immer 1000 Millisekunden schlafen lassen. Von daher hast du von der performance her keine Beeinträchtigungen zu befürchten.
 

JPKI

Top Contributor
Upps, das hab ich oben vergessen :oops:
In Code-Zeilen sieht das dann so aus:
Code:
try { Thread.sleep(1000); } catch (InterruptedException ex) {}
 

möbi

Mitglied
Mhm... die Uhr ansich habe ich jetzt zum laufen bekommen. Allerdings weiß ich jetzt nicht wirklich, wie ich diese auch in der JToolBar anzeigen kann.
Ich habe 2 Java-Classen. ClockThread und ClockView


ClockThread.java

Code:
import java.util.Date;
import java.text.DateFormat;
import javax.swing.JComponent;


public class ClockThread extends Thread
{
	private static String time;
	private DateFormat df = DateFormat.getTimeInstance();
	private JComponent c;
	
	public ClockThread(JComponent c)
	{
		this.c = c;
		this.start();
	}
	
	public void run()
	{
		while(isInterrupted() == false)
		{
			//Uhrzeit aktualisieren
			ClockThread.time = df.format(new Date());
			
			//Komponente zum Neuzeichnen auffordern
			c.repaint();
			
			//eine Sekunde schlafen
			try
			{
				sleep(1000);
			}
			catch(InterruptedException e)
			{
				return;
			}
		}
	}
	
	public static String getTime()
	{
		return time;
	}

ClockView.java
Code:
import java.awt.*;
import java.awt.Event.*;
import javax.swing.*;


public class ClockView extends JFrame
{
	class ClockPanel extends JToolBar
	
	{
		public void paintComponent(Graphics g)
		{
			super.paintComponent(g);
			
			//Uhrzeit einblenden
			g.setFont(new Font("Arial", Font.PLAIN, 12));
			g.setColor(Color.black);
			g.drawString(ClockThread.getTime(), 15, 30);
		}
	}
	
	private ClockThread ct;
	private ClockPanel display;
	
	public ClockView()
	{
		//setTitle("Fenster mit Uhrzeit");
		display = new ClockPanel();
		getContentPane().add(display, BorderLayout.CENTER);
		//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//Thread für Uhrzeit erzeugen und starten;
		ct = new ClockThread(display);
	}
	
	public static void main(String args[])
	{
		//Fenster erzeugen und anzeigen
		ClockView mw = new ClockView();
		mw.setSize(500, 350);
		mw.setLocation(200,300);
		mw.setVisible(true);		
	}	
}


Für einen kleinen Hinweis, wie ich das jetzt auch in der Toolbar anzeigen kann, wäre ich sehr dankbar :)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben