Visualizzazione dei risultati da 1 a 7 su 7

Visualizzazione discussione

  1. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    È il mio che è qui.


    È sufficiente tenere una variabile di istanza in più es. lastDiffTime, inizialmente a 0. Il calcolo del diffTime complessivo sarà quindi il currentTimeMillis meno lo startTime più lastDiffTime.
    Quando sospendi, prendi il diffTime corrente e lo assegni a lastDiffTime, oltre ovviamente a stoppare il timer. Quando riprendi, risetti startTime e avvii il timer, proprio come fa per il pulsante Start.

    P.S. Lo Stop ovviamente resetta a 0 il lastDiffTime!
    se ho capito bene:
    codice:
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    
    public class Cronometro
    {
    private JFrame frame;
    private JLabel labelTime;
    private JPanel panelButtons;
    private JButton buttonStart;
    private JButton buttonPause;
    private JButton buttonResume;
    private JButton buttonStop;
    private Timer timer;
    private long startTime;
    private long lastDiffTime;
    
    
    public Cronometro ()
    {
    frame = new JFrame ("Cronometro");
    frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
    frame.setSize (220, 140);
    
    
    labelTime = new JLabel ("0:00:00.0");
    labelTime.setFont (new Font ("SansSerif", Font.BOLD, 30));
    labelTime.setHorizontalAlignment (JLabel.CENTER);
    
    
    buttonStart = new JButton ("START");
    buttonStop = new JButton ("STOP");
    buttonPause = new JButton("PAUSE");
    buttonResume = new JButton("RESUME");
    buttonStop.setEnabled (false);
    
    
    panelButtons = new JPanel (new GridLayout (2, 2));
    panelButtons.add (buttonStart);
    panelButtons.add (buttonStop);
    panelButtons.add(buttonPause);
    panelButtons.add(buttonResume);
    
    
    frame.add (labelTime, BorderLayout.CENTER);
    frame.add (panelButtons, BorderLayout.SOUTH);
    lastDiffTime =0;
    timer = new Timer (50, new ActionListener () {
    public void actionPerformed (ActionEvent e) {
    long diffTime = System.currentTimeMillis () - startTime + lastDiffTime;
    
    
    int decSeconds = (int) (diffTime % 1000 / 100);
    int seconds = (int) (diffTime / 1000 % 60);
    int minutes = (int) (diffTime / 60000 % 60);
    int hours = (int) (diffTime / 3600000);
    
    
    String s = String.format ("%d:%02d:%02d.%d", hours, minutes,
    seconds, decSeconds);
    
    
    labelTime.setText (s);
    }
    });
    
    
    buttonStart.addActionListener (new ActionListener () {
    public void actionPerformed (ActionEvent e) {
    startTime = System.currentTimeMillis ();
    timer.start ();
    buttonStart.setEnabled (false);
    buttonStop.setEnabled (true);
    }
    });
    
    
    buttonStop.addActionListener (new ActionListener () {
    public void actionPerformed (ActionEvent e) {
    lastDiffTime=0;
    timer.stop ();
    buttonStart.setEnabled (true);
    buttonStop.setEnabled (false);
    }
    });
    
    buttonPause.addActionListener( new ActionListener(){
    public void actionPerformed(ActionEvent e){
    lastDiffTime = System.currentTimeMillis();
    timer.stop();
    }
    });
    
    buttonResume.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    startTime = System.currentTimeMillis();
    timer.start();
    }
    });
    
    
    frame.setVisible (true);
    }
    
    
    public static void main (String[] args)
    {
    SwingUtilities.invokeLater (new Runnable () {
    public void run () {
    new Cronometro ();
    }
    });
    }
    }
    però non mi funziona il resume. Mi da un numero enorme! Dove sbaglio?!

    (Grazie per la risposta e per la disponibilità)
    Ultima modifica di misterlol; 02-02-2015 a 18:29
    steelass

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.