Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich verusche nun schon seit geraumer Zeit eine Art Stoppuhr für ein Spiel hinzubekommen.
Code:
for (int i = 0; i<20; i++)
{
try
{
Thread.sleep(1000);
z=z-1;
System.out.println(z);
}
catch (Exception e) {}
}
Dies ist ein kleiner Ausschnitt aus der Methode long Zeit().
Nun wollte ich die Zeit(in dem Fall z) auf einem Label immer wieder neu ausgeben.
Poblem: Label verlangt einen String. Weiß an dieser Stelle nicht weiter.
Wie kann ich die jeweils aktualisierte Zeit auf meiner Oberfläche Ausgeben?
Danke
MAIAarts.
Nachtrag:
Ein wenig hat sich nun getan. Gecastet hat es nun zumindest soweit geklappt, dass der Endwert auf dem Label ausgegeben wird. Nun muss es nach jedem runterzählen aktualisiert werden.
Das hat natürlich geklappt.
Mal eine andere Frage zu selben Code. Wenn der oben genannte Code in einer eigenen Klasse steht und ich z als Return übergebe, zeigt die Oberfläche natürlich nur den letzten Wert für z an.
Wie kann ich den richtigen Wert bei jedem Schleifen Druchlauf übergeben?
Du brauchst einen eigenständigen Thread, der von außen das Label aktualisiert.
Das geht recht einfach, wenn der Thread nur eine Methode in deiner Klasse auffruft, und damit bekannt gibt, dass es neue Daten für die Anzeige gibt. Deine Klasse holt sich dann die bereit gestellten Daten ab und/oder berechnet sie und zeigt sie an.
Hier mal eine Demo:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.util.*;
public class TimeFrame extends JFrame {
private JLabel timeLabel;
private DateFormat formatter;
private Timer timer;
private long time;
public TimeFrame(String title) {
super(title);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
formatter = new SimpleDateFormat("HH:mm:ss.SSS");
timer = new Timer(this, 20);
timer.start();
timeLabel = new JLabel("00:00:00.000");
timeLabel.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20));
timeLabel.setHorizontalAlignment(SwingConstants.CENTER);
timeLabel.setFont(new Font(timeLabel.getFont().getFontName(), Font.PLAIN, 60));
add(timeLabel);
pack();
setLocationRelativeTo(null);
}
public void ready() {
timeLabel.setText(formatter.format(new Date(time)));
time += 20;
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {}
new TimeFrame("TimeFrame").setVisible(true);
}
}
Code:
public class Timer extends Thread {
private TimeFrame owner;
private long wait;
public Timer(TimeFrame owner, long wait) {
this.owner = owner;
this.wait = wait;
}
public void run() {
while(!isInterrupted()) {
try {
Thread.sleep(wait);
owner.ready();
}
catch(InterruptedException e) {
interrupt();
}
}
}
}
Da hast Du mir eine tolle Aufgabe für den Ostersonntag gestellt.
Sobald ich aufwache werde ich mir den Code genauer ansehen.
Vielen Dank erstmal. Melde mich falls etwas ist.