# Digitale Uhr in einem JLabel möglich?



## Jochen (27. Okt 2005)

Ich wollte nen einfaches Projekt machen. Nämlich eine Uhr die in einem Fenster angezeigt wird. 
Hab mir gedachte ich benutzte ein JFrame in dem ein JLabel ist. und in diesem JLabel wird dann die Zeit angezeigt. Damit das ebig läuft muss ich doch einen Thread erstellen und in diesem immer die aktuelle zeit herholen? Aber wie gebe ich sie dann an das JLabel und vor allem wie wird das JLabel immer erneuert? Schließlich muss es ja immer aktualiesiert werden.

Ist die Idee für den Thread so richtig?

```
public class ClockThread extends Thread implements Runnable{
	
	private Date date1 = null;

	public void run() {
		
		while (true) 
		{
			try 
			{
				
				long datum1 = date1.getTime();
				String test = date1.toString();
				this.sleep(1000);
			}
			catch (Exception e) 
			{
				System.out.println("");
			}
		}
	}
}
```


----------



## bygones (27. Okt 2005)

Swing ist nicht threadsicher.... such mal im Forum nach invokeLater z.b.

ansonsten kannst du einfach per setText das Label ändern


----------



## Jochen (27. Okt 2005)

Und wie sag ich dem JLabel das es sich erneuern soll? Damit die Veränderung sichtbar wird? Oder muss man dafür das ganze JFrame erneuern?


----------



## Guest (27. Okt 2005)

```
TimerTask task = new TimerTask() {
  Date date = new Date();
  SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

  public void run() {
    date.setTime(System.currentTimeMillis());
    label.setText(dateFormat.format(date));
  }
}

Timer timer = Timer();
timer.schedule(task, 0, 1000);
```


----------



## L-ectron-X (27. Okt 2005)

Das Programm tut es.

```
import javax.swing.*;
import java.text.*;
import java.awt.*;

public class ClockFrame extends JFrame implements TimeCustomer {
   private JLabel timeLabel;
   private Clock clock;
   private DateFormat formatter;
   private Font font;
   
   public ClockFrame(String title) {
      super(title);
      setSize(250, 100);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      
      formatter = new SimpleDateFormat("HH:mm:ss");
      
      font = new Font("Arial", Font.BOLD, 48);
      timeLabel = new JLabel("00:00:00", (int)JLabel.CENTER_ALIGNMENT);
      timeLabel.setFont(font);
      getContentPane().add(timeLabel);

      clock = new Clock(this);
      clock.start();
   }

   public void getTime() {
      timeLabel.setText(formatter.format(clock.getDate()));
   }
   
   public static void main(String[] args) {
      new ClockFrame("Uhr").setVisible(true);
   }
}
```


```
import java.util.*;

public class Clock extends Thread {
   private Date date;
   private TimeCustomer tc;

   public Clock(TimeCustomer tc) {
      this.tc = tc;
   }

   public void run() {
      while(true) {
         date = new Date();
         try {
            tc.getTime();
            sleep(1000);
         }
         catch(InterruptedException e) {
            System.out.println("Fehler bei CPU-Freigabe!");
         }

      }
   }

   public Date getDate() {
      return date;
   }
}
```


```
public interface TimeCustomer {
   public void getTime();
}
```


----------



## André Uhres (27. Okt 2005)

Vielleicht kann man auch mal die Uhrzeit als Bean gebrauchen:

```
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
public class UhrZeit extends JPanel {
    private Thread uhr;
    private int sleepTime=500;
    private String format= "HH:mm";
    private String formatSave= null;
    public UhrZeit() {
        initComponents();
        formatSave=format;
        uhr = new Thread(){
            public void run(){
                while(true){
                    timerLabel.setText(getZeit());
                    try{sleep(sleepTime);}catch(Throwable ex){}
                }
            }
        };
        uhr.start();
    }
    private void initComponents() {
        timerLabel = new JLabel();
        setBackground(new Color(204, 255, 255));
        setBorder(new BevelBorder(BevelBorder.RAISED));
        setToolTipText("Timer");
        setFocusable(false);
        setFont(new Font("Microsoft Sans Serif", 1, 11));
        setMaximumSize(new Dimension(80, 26));
        setMinimumSize(new Dimension(46, 26));
        setPreferredSize(new Dimension(46, 26));
        addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent evt) {
                if(getPreferredSize().getWidth()>40)
                    setFormat(formatSave+formatSave.substring(2,3)+"ss");
            }
            public void mouseReleased(MouseEvent evt) {
                if(getPreferredSize().getWidth()>40)
                    (new Thread(){public void run(){try{sleep(10000);}catch(Throwable ex){}
                    setFormat(formatSave);}}).start();
            }
        });
        add(timerLabel);
    }
    private JLabel getTimerLabel(){
        if(null==timerLabel)
            timerLabel=new JLabel();
        return timerLabel;
    }
    public String getZeit(){
        return (new SimpleDateFormat(format)).format(new GregorianCalendar().getTime());
    }
    public String getFormat(){ return format; }
    public void setFormat(String format){
        this.format=format;
        if(format.length()<8){
            sleepTime=10000;
        }else{
            uhr.interrupt();
            sleepTime=500;
        }
    }
    public Font getFont(){ return getTimerLabel().getFont(); }
    public void setFont(Font font){ getTimerLabel().setFont(font); }
    public Color getColor(){  return getTimerLabel().getForeground(); }
    public void setColor(Color color){ getTimerLabel().setForeground(color); }
    protected JLabel timerLabel;
}
```


----------

