Quellcode
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import javax.swing.event.*;
- import java.awt.Graphics;
- import java.awt.Event;
- import java.awt.Font;
- import java.awt.Color;
- public class TimerTest extends JFrame
- {
- private int min = 0;
- private int sec = 0;
- private boolean timer = false;
- private JLabel Zeit = new JLabel();
- public TimerTest(String title)
- {
- super(title);
- setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
- int frameWidth = 1280;
- int frameHeight = 800;
- setSize(frameWidth, frameHeight);
- Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
- int x = 0;
- int y = 0;
- setLocation(x, y);
- Container cp = getContentPane();
- cp.setLayout(null);
- Zeit.setBounds(518, 532, 260, 148);
- Zeit.setText("00:00");
- Zeit.setFont(new Font("MS Sans Serif", Font.PLAIN, 103));
- cp.add(Zeit);
- Action space = new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- TimerStartStop();
- }
- };
- Zeit.getInputMap().put(KeyStroke.getKeyStroke("SPACE"),"space");
- Zeit.getActionMap().put("space", space);
- Action r = new AbstractAction() {
- public void actionPerformed(ActionEvent e) {
- min = 0;
- sec = 0;
- Zeit.setText("00:00");
- }
- };
- Zeit.getInputMap().put(KeyStroke.getKeyStroke("R"),"r");
- Zeit.getActionMap().put("r", r);
- setResizable(true);
- setVisible(true);
- }
- public void TimerStartStop()
- {
- if ( timer == true )
- {
- timer = false;
- }
- else
- {
- timer = true;
- Timer();
- }
- }
- public void msWarten(int ms) {
- try {
- Thread.sleep(ms);
- } catch (InterruptedException e) {
- }
- }
- public void Timer()
- {
- while(timer == true)
- {
- msWarten(1000);
- sec += 1;
- if (sec == 60)
- {
- sec = 0;
- min = min + 1;
- }
- if (Integer.toString(sec).length() < 2)
- {
- Zeit.setText(min+":0"+sec);
- }
- else if (Integer.toString(sec).length() == 2)
- {
- Zeit.setText(min+":"+sec);
- }
- }
- }
- public static void main (String[] args) {
- new TimerTest("");
- }
- }
Wenn ich dieses Programm laufen lasse, dann kann ich den Timer zwar mit Leertaste starten, jedoch wird die Grafik nicht erneuert, der Timer zählt aber im Hintergrund die Sekunden mit.
Dann, wenn ich es (ich arbeite mit BlueJ) "manuell", also durch rechtsklicken auf das Objekt und dann TimerStartStop() auswähle, hört der Timer auf zu zählen und zeigt mir die Zeit an.
Wenn ich jedoch den Timer "manuell" starte, dann wird die Grafik auch erneuert.
Woran kann das liegen?
Haggi