Ich möchte eine stoppuhr machen bzw habe ich das schon. ich kann mit start-button die stoppuhr starten und mit einem stop-button anhalten aus der differenzzeit ermittel ich die zeit in std, min sek und ms. das ganz lass ich mir dann anzeigen.
jetzt würde ich gerne das ganz ständig aktualisieren damit die stopuhr richtig läuft und nicht nur die endzeit anzeigt.
kann ich das nur über threads lösen oder gibt es da eine andere möglichkeit paint ständig neu aufzurufen.
jetzt würde ich gerne das ganz ständig aktualisieren damit die stopuhr richtig läuft und nicht nur die endzeit anzeigt.
kann ich das nur über threads lösen oder gibt es da eine andere möglichkeit paint ständig neu aufzurufen.
Code:
import java.awt.*;
import java.awt.event.*;
import java.text.DecimalFormat;
public class Stoppuhr extends Container implements ActionListener, WindowListener
{
private Button start, stop, clear;
private float ergebnis = 0, milli = 0, sekWert = 0;
private long sek, min, std, tag, jahr, timeStop, timeDiff, timeStart;
private static long time = 0;
private int xStop = 0, milli2 = 0, xStart = 0;
public static void main(String[] args)
{
Stoppuhr stoppuhr = new Stoppuhr();
Frame f = new Frame();
f.setTitle("Stoppuhr");
f.add(stoppuhr);
f.setLocation(200, 100);
f.setSize(500, 550);
f.setVisible(true);
f.addWindowListener(stoppuhr);
f.setBackground(Color.lightGray);
}
public Stoppuhr()
{
setLayout(null);
setBackground(Color.lightGray);
start = new Button("Start");
add(start);
start.setBounds(150, 10, 50, 25);
start.addActionListener(this);
stop = new Button("Stop");
add(stop);
stop.setBounds(210, 10, 50, 25);
stop.addActionListener(this);
clear = new Button("Clear");
add(clear);
clear.setBounds(270, 10, 50, 25);
clear.addActionListener(this);
}
public void windowClosing(WindowEvent event)
{
System.exit(0);
}
public void windowIconified(WindowEvent event)
{
}
public void windowOpened(WindowEvent event)
{
}
public void windowClosed(WindowEvent event)
{
}
public void windowDeiconified(WindowEvent event)
{
}
public void windowActivated(WindowEvent event)
{
}
public void windowDeactivated(WindowEvent event)
{
}
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == start)
{
time = System.currentTimeMillis();
timeStart = time;
xStart = 1;
}
if(event.getSource() == stop)
{
time = System.currentTimeMillis();
timeStop = time;
xStop = 1;
time = 0;
}
if(event.getSource() == clear)
{
timeStart = 0;
timeStop = 0;
timeDiff = 0;
time = 0;
sek = 0;
min = 0;
std = 0;
tag = 0;
milli2 = 0;
xStart = 0;
xStop = 0;
}
repaint();
}
public void paint(Graphics g)
{
if((xStop == 1) && (xStart == 1))
{
timeDiff = timeStop - timeStart;
xStart = 0;
xStop = 0;
}
if(timeDiff > 86400000)
{
sek = timeDiff / 1000;
min = sek / 60;
sek = sek % 60;
std = min / 60;
min = min % 60;
tag = std / 24;
std = std % 24;
xStart = 0;
xStop = 0;
}
else
if(timeDiff > 3600000)
{
sek = timeDiff / 1000;
min = sek / 60;
sek = sek % 60;
std = min / 60;
min = min % 60;
xStart = 0;
xStop = 0;
}
else
if(timeDiff > 60000)
{
sek = timeDiff / 1000;
min = sek / 60;
sek = sek % 60;
xStart = 0;
xStop = 0;
}
else
if(timeDiff > 1000)
{
sek = timeDiff / 1000;
xStart = 0;
xStop = 0;
}
milli = timeDiff;
milli = milli / 1000;
sekWert = sek + (min * 60) + (std * 60 * 60) + (tag * 24 * 60 * 60);
milli = milli - sekWert;
milli = Math.round(milli * 100) / 100.0f;
milli = milli * 100;
milli2 =(int)milli;
DecimalFormat df = new DecimalFormat("00");
g.drawLine(200, 51, 300, 51); // oben
g.drawLine(200, 52, 300, 52); // oben
g.drawLine(200, 67, 300, 67); // mitte Horizontal
g.drawLine(200, 83, 300, 83); // unten
g.drawLine(200, 84, 300, 84); // unten
g.drawLine(200, 51, 200, 84); // links
g.drawLine(201, 52, 201, 83); // links
g.drawLine(300, 51, 300, 84); // rechts
g.drawLine(299, 52, 299, 83); // rechts
g.drawLine(225, 52, 225, 83); // mitte V1
g.drawLine(251, 52, 251, 83); // mitte V2
g.drawLine(278, 52, 278, 83); // mitte V2
g.drawString(" Std " + " Min " + " Sek " + " Ms ", 202, 64);
g.drawString("gestoppte Zeit: ", 114, 72);
g.drawString("" + df.format(std) , 206, 80);
g.drawString("" + df.format(min) , 231, 80);
g.drawString("" + df.format(sek) , 258, 80);
g.drawString("" + df.format(milli2), 282, 80);
}
}