Auto-Aktualisierung der Zeitanzeige

Private Void

Aktives Mitglied
Ich hab es zwar schon geschafft, dass das Datum und die Uhrzeit zum Zeitpunkt des Programmststarts angezeigt wird:

Java:
import java.util.Calendar;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Kalender { 
	String[] month_names = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Okt", "Nov", "Dec"};
	String[] week_names = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
	
	public static void main(String[] args) {
		Kalender k = new Kalender();
		k.datum_uhrzeit();
	}
	
	public Kalender(){}
	
	private void datum_uhrzeit(){
		JFrame f = new JFrame();
		f.setLayout(null);
		f.setLocation(300, 200);
		f.setSize(140, 100);
		f.setVisible(true);
    	
    	Calendar c = new java.util.GregorianCalendar();
    	int day = c.get(java.util.Calendar.DATE);
    	int month = c.get(java.util.Calendar.MONTH);
    	int year = c.get(java.util.Calendar.YEAR);
    	int hour = c.get(java.util.Calendar.HOUR_OF_DAY);
    	int min = c.get(java.util.Calendar.MINUTE);
    	int sec = c.get(java.util.Calendar.SECOND);
    	int week_day = c.get(java.util.Calendar.DAY_OF_WEEK)-1;
    	
    	JLabel l = new JLabel(week_names[week_day]+"  "+day+". "+month_names[month]+". "+year);
		l.setLocation(10, 10);
		l.setSize(150, 20);
		f.add(l);
		
		String x, y, z;
		
		if(hour<10){
			x = "0";
		}else{
			x = "";
		}
		if(min<10){
			y = "0";
		}else{
			y = "";
		}
		if(sec<10){
			z = "0";
		}else{
			z = "";
		}
		
		JLabel l_2 = new JLabel(x+hour+":"+y+min+":"+z+sec);
		l_2.setLocation(36, 30);
		l_2.setSize(150, 20);
		f.add(l_2);
	}
}

aber was muss ich machen, damit sich die Anzeige jede Sekunde aktualisiert?
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Ich habe gerade keine Lust auf refactoring, das kannst du schön selbst machen(solltest du auch unbedingt mal :D ), aber hier mal per copy&paste:

Zeile 55 ersetzen durch
[java=55]
final JLabel l_2 = new JLabel(x + hour + ":" + y + min + ":" + z + sec);
[/code]

danach einfügen
[java=56]
Timer timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int min = c.get(Calendar.MINUTE);
int sec = c.get(Calendar.SECOND);
l_2.setText((hour < 10 ? "0" : "") + hour + ":"
+ (min < 10 ? "0" : "") + min + ":"
+ (sec < 10 ? "0" : "") + sec);
}
});
timer.start();
//....setLocation und der kram kommt hier
[/code]

Viel Spaß! :D
 
Zuletzt bearbeitet:

Private Void

Aktives Mitglied
Vielen Dank für diese Hilfe!

Hier nun meine Endfassung:
Java:
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.util.Calendar;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Kalender {
	String[] month_names = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec"};
    String[] week_names = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    JFrame f;
    JLabel datum, uhrzeit;
    
    public static void main(String[] args) {
    	Kalender k = new Kalender();
    	k.fenster();
    }
    
    public Kalender (){}
    
    private void fenster(){
    	f = new JFrame();
        f.setLayout(null);
        f.setLocation(300, 200);
        f.setSize(135, 100);
        f.setVisible(true);
        
        datum = new JLabel();
        datum.setLocation(10, 10);
        datum.setSize(150, 20);
        f.add(datum);
        
        uhrzeit = new JLabel();
        uhrzeit.setLocation(36, 30);
        uhrzeit.setSize(150, 20);
        f.add(uhrzeit);

    	Timer timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	aktualisierung();
            }
        });
        timer.start();
    }
    
    private void aktualisierung(){
        Calendar c = Calendar.getInstance();
        int week_day = c.get(java.util.Calendar.DAY_OF_WEEK)-1;
        int day = c.get(java.util.Calendar.DATE);
        int month = c.get(java.util.Calendar.MONTH);
        int year = c.get(java.util.Calendar.YEAR);
        datum.setText(week_names[week_day]+"  "+(day<10?"0":"")+day+". "+month_names[month]+". "+year);
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int min = c.get(Calendar.MINUTE);
        int sec = c.get(Calendar.SECOND);
        uhrzeit.setText((hour<10?"0":"")+hour+":"+(min<10?"0":"")+min+":"+(sec<10?"0":"")+sec);
    }
}
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Mhm..du könntest dir übrigens den Kram mit den beiden String Arrays + die überlange aktualisierungs-Methode sparen/kürzen in dem du ein/zwei DateFormat`s benutzt:

Anstelle der Arrays:
Java:
    SimpleDateFormat formatTime = new SimpleDateFormat("HH.mm.ss");
    SimpleDateFormat formatDate = new SimpleDateFormat("EEE dd.MMM.yyyy");

aktualisierung() könnte dann irgendwie so aussehen:
Java:
    private void aktualisierung() {
	Calendar c = Calendar.getInstance();
	datum.setText(formatDate.format(c.getTime()));
	uhrzeit.setText(formatTime.format(c.getTime()));
    }
und die ganze Klasse ist schon wieder ein wenig aufgeräumter.

[c]public Kalender (){}[/c] so etwas kannst du dir eig. auch sparen!

Und dein Programm terminiert nie:
[c] f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);[/c]
 

Private Void

Aktives Mitglied
Du meinst es quasi so:

Java:
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Kalender {
	static SimpleDateFormat formatTime = new SimpleDateFormat("HH.mm.ss");
    static SimpleDateFormat formatDate = new SimpleDateFormat("EEE dd.MMM.yyyy");
    static JLabel datum, uhrzeit;
    
    public static void main(String[] args) {
    	JFrame f = new JFrame();
        f.setLayout(null);
        f.setTitle("Datum & Uhrzeit");
        f.setLocation(300, 200);
        f.setSize(110, 100);
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        datum = new JLabel();
        datum.setLocation(15, 10);
        datum.setSize(85, 20);
        f.add(datum);
        
        uhrzeit = new JLabel();
        uhrzeit.setLocation(32, 30);
        uhrzeit.setSize(75, 20);
        f.add(uhrzeit);

    	Timer timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	Calendar c = Calendar.getInstance();
                datum.setText(formatDate.format(c.getTime()));
                uhrzeit.setText(formatTime.format(c.getTime()));
            }
        });
        timer.start();
    }
}
?

Wären immerhin 16 Zeilen weniger!
 

Private Void

Aktives Mitglied
Es ist nur ein Teil meines momemtan drei Klassen (201, 101 und 94 Zeilen) umfassenden Programms ist. Es wird stetig größer, weil ich immer wieder was hinzufüge!
Ich kann dich beruhigen, im Original ist das schon auf mehrere Methoden aufgeteilt und objektorientiert angelegt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Blndner Auto Beispiel Java Basics - Anfänger-Themen 4
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
F Auto String mit Array Name aus Datei... oder so ähnlich Java Basics - Anfänger-Themen 4
E Klassen Auto Klasse Java Basics - Anfänger-Themen 6
P Klassen In einer Autoklasse das Objekt Auto mittels Collection Speichern Java Basics - Anfänger-Themen 4
T Erste Schritte Auto betanken Java Basics - Anfänger-Themen 3
B Klassen Programm für einen Auto Boardcomputer Java Basics - Anfänger-Themen 20
U auto. Typenkonvertierung Java Basics - Anfänger-Themen 19
A Auto bewegen (mit SuM) Java Basics - Anfänger-Themen 27
B ""fahrendes Auto"" Java Basics - Anfänger-Themen 14
N Arraylist Auto sortieren Java Basics - Anfänger-Themen 7
A Auto-Updater Java Basics - Anfänger-Themen 4
C Auto tanken Java Basics - Anfänger-Themen 6
A Aktualisierung eines Buttons Java Basics - Anfänger-Themen 18
R Text Pane Aktualisierung erst nach JOptionPane Java Basics - Anfänger-Themen 10
C Array Aktualisierung wird nicht im Tooltip angezeigt Java Basics - Anfänger-Themen 2
M Gui Aktualisierung Java Basics - Anfänger-Themen 2
R aktualisierung des View im MVC-Pattern Java Basics - Anfänger-Themen 5
H Aktualisierung des JProgressBar in Abhängigkeit eines Threads Java Basics - Anfänger-Themen 5
T Canvas aktualisierung mit repaint Java Basics - Anfänger-Themen 5
G Fortlaufende Aktualisierung bei eigener Klasse Java Basics - Anfänger-Themen 2
G Aktualisierung von JTable Java Basics - Anfänger-Themen 4
I Problem mit Inhalt-Aktualisierung Java Basics - Anfänger-Themen 18
M Problem mit Aktualisierung von GridBagLayout Java Basics - Anfänger-Themen 2
Q Zeitanzeige aktualisieren Java Basics - Anfänger-Themen 7
M jLabel aktuallisieren bzw Progressbar für Zeitanzeige Java Basics - Anfänger-Themen 5
A Zeitanzeige eines Musictracks Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben