Java pobieranie czasu między dwoma zdarzeniami

0

Hi,

chciałbym napisać coś na kształt proste stopera.
Nie wiem tylko jak zrobić aby na bieżąco wypisywać na label czas który upłynął.

import java.awt.BorderLayout;
import java.awt.*;
import java.awt.ActiveEvent.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;

import java.util.Date;

class Stoper_Alibe extends JFrame
{
    public Stoper_Alibe()
    {
        setSize(150, 100);
        setTitle("Stoper ffff Dżaffie");
        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        panel1 = new JPanel();
        button1 = new JButton("Start");
        button2 = new JButton("Stop");
        label1 = new JLabel();

        panel1.add(button1);
        panel1.add(button2);
        add(panel1, BorderLayout.EAST);

        panel2 = new JPanel();
        panel2.add(label1);
       add(panel2, BorderLayout.SOUTH);

       

        button1.addActionListener(new ActionListener()
       {
            public void actionPerformed(ActionEvent e)
           {
                time_start = System.currentTimeMillis();
                label1.setText("");
            }
        });

         button2.addActionListener(new ActionListener()
       {
            public void actionPerformed(ActionEvent e)
           {
                time_stop = System.currentTimeMillis();
                label1.setText("" +(( time_stop - time_start) / 1000 ));
            }
        });
      repaint();
    }

    private JPanel panel1;
    private JPanel panel2;
    private JLabel label1;
    private JButton button1;
    private JButton button2;

    private long time_start;
    private long time_stop;
    
}

public class Stoper 
{
    public static void main(String[] args) 
    {
       EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
               ( new Stoper_Alibe()).setVisible(true);
            }
        }
            );
    }
}

Proszę o pomysły.

Pozdrawiam!

0

Użyj timer'a.

0

Proszę o rozwinięcie powyższej wypowiedzi.
Jak za pomocą Timera aktualizować wartości wysyłane na label?

0

Dokładnie tak samo jak robisz to w tych listenerach buttonów. Timer po prostu co określony czas wywołuje napisanego przez Ciebie ActionListenera.
http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/Timer.html
Tylko pamiętaj, że co ten zadany czas(np. 100ms) musisz pobierać czas z systemu i na jego podstawie liczyć ile czasu upłynęło - nie ma gwarancji, że timer odpali event dokładnie o zadanym czasie.

0

Dziękuję za odpowiedz.
Próbowałem zastosować ten obiekt ale coś mi nie wyszło. Możesz rzucić okiem na ten kod i dać mi jakaś wskazówkę?

import java.awt.*;
import java.awt.ActiveEvent.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.Timer;

import java.util.*;

class Stoper_Alibe extends JFrame
{
    public Stoper_Alibe()
    {
        setSize(150, 100);
        setTitle("Stoper ffff Dżaffie");
        super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        panel1 = new JPanel();
        button1 = new JButton("Start");
        button2 = new JButton("Stop");
        label1 = new JLabel();

        panel1.add(button1);
        panel1.add(button2);
        add(panel1, BorderLayout.EAST);

        panel2 = new JPanel();
        panel2.add(label1);
        add(panel2, BorderLayout.SOUTH);

        timer1 = new Timer(100, new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
               label1.setText("" + (time_stop - System.currentTimeMillis()));
            }
        });

        button1.addActionListener(new ActionListener()
       {
            public void actionPerformed(ActionEvent e)
           {
                time_start = System.currentTimeMillis();
                label1.setText("");
            }
        });

         button2.addActionListener(new ActionListener()
       {
            public void actionPerformed(ActionEvent e)
           {
                time_stop = System.currentTimeMillis();
                label1.setText("" +(( time_stop - time_start) / 1000 ));
            }
        });
      repaint();
    }

    private JPanel panel1;
    private JPanel panel2;
    private JLabel label1;
    private JButton button1;
    private JButton button2;
    private Timer timer1;

    private long time_start;
    private long time_stop;
    private long time1;
}

public class Stoper 
{
    public static void main(String[] args) 
    {
       EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
               ( new Stoper_Alibe()).setVisible(true);
            }
        }
            );
    }
}

Pozdrawiam!

0

zabrakło uruchomienia tego timera: timer1.start();

0

Dziękuję, poprawiłem obliczenia i teraz działa.
Pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1