JFrame.setTitle() zur Laufzeit ständig aktualisieren

Lautsprecher

Erfahrenes Mitglied
Hallo ich bastle gerade an einer Java Application. Dafür verwende ich ein JFrame das bis jetzt einen "Festen Titel" besitzt. Den Titel setze ich bis jetzt im initialize() meines Pgm's:

Code:
public static void main(String[] args) 
{
      Info application = new Info();   
      application.show();
}

public Info() 
{
   super();
   initialize();
}

private void initialize() 
{
this.setSize(new java.awt.Dimension(1044,657));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setContentPane(getJContentPane());
this.setTitle("Touch");

}

Ich möchte nun aber noch oben in der "blauen Titelleiste" gerne das Datum und die aktuelle Uhrzeit ausgeben lassen. Dafür verwende ich diese Methode, welche ich auch im initialize starte:

Code:
 public void clock()
{
     Thread updateSystemTime = new Thread()
     {
 	public void run()
	{
                	while (true)
		{
	    	  Calendar calender = Calendar.getInstance();
		SimpleDateFormat sdf = new SimpleDateFormat();
		sdf.applyPattern( "EEEE', 'dd. MMMM yyyy");
		/* EEEE steht für Tag der Woche lang*/
		/* E steht für Tag der Woche kurz z.B.: Mi */
		SimpleDateFormat sdfzeit = new SimpleDateFormat();
		sdfzeit.applyPattern( "HH:mm:ss" );
		super().setTitle(sdf.format(calender.getTime()) + "        " +   
                                 sdfzeit.format(calender.getTime()));
		}
	}
	};
	updateSystemTime.start();
	pack();
}

Bis jetzt habe ich die Uhrzeit immer in einem JLabel ausgeben und aktualisieren lassen, dass ist soweit keine Problem. Nur weiß ich nicht wie ich meine Uhrzeit auf der Titelleiste ausgeben bzw. ständig aktualisieren kann...
 
Hallo.
wie wäre es damit:
Java:
javax.swing.Timer t = new javax.swing.Timer( 1000, new ActionListener() { 
  public void actionPerformed( ActionEvent e ) { 
    Calendar calender = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat();
        sdf.applyPattern( "EEEE', 'dd. MMMM yyyy");
        /* EEEE steht für Tag der Woche lang*/
        /* E steht für Tag der Woche kurz z.B.: Mi */
        SimpleDateFormat sdfzeit = new SimpleDateFormat();
        sdfzeit.applyPattern( "HH:mm:ss" );
        super().setTitle(sdf.format(calender.getTime()) + "        " +   
                                 sdfzeit.format(calender.getTime()));
        } 
  } 
});
Ich konnte es aber nicht testen.
Du findest auch hier ein Beispiel.
 
Hallo Danke Dir für deinen Vorschlag

mir ist nur nicht ganz klar, wie der Timer funktioniert? läuft dieser nur 1000 Mal?
und warum braucht man die action Performed Methode?
 
Der Time läuft nicht 1000 Mal. Das sind die ms => 1000ms == 1 sek. D.h. Jede Sekunde löst der Timer ein ActionEvent aus. Was bei dem Event passieren soll, definierst Du in actionPerformed.
 
Hallo,

hier mal das ganze implementiert.

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;


import javax.swing.JFrame;

public class ClockFrame
    extends JFrame
{


  public ClockFrame()
  {
    setSize(300, 300);
    javax.swing.Timer t = new javax.swing.Timer( 1000, new ActionListener() {
      public void actionPerformed( ActionEvent e ) {
        Calendar calender = Calendar.getInstance();
            SimpleDateFormat sdf = new SimpleDateFormat();
            sdf.applyPattern( "EEEE', 'dd. MMMM yyyy");
            /* EEEE steht für Tag der Woche lang*/
            /* E steht für Tag der Woche kurz z.B.: Mi */
            SimpleDateFormat sdfzeit = new SimpleDateFormat();
            sdfzeit.applyPattern( "HH:mm:ss" );
            ClockFrame.this.setTitle(sdf.format(calender.getTime()) + "        " +   
                                     sdfzeit.format(calender.getTime()));
            }
      }
    ); 
    t.start();
  }

  public static void main(String[] args)
  {
    new ClockFrame().setVisible(true);
  }

  

}

MFG

zEriX
 
Zuletzt bearbeitet:
Zurück