|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2005
Città: CH
Messaggi: 1058
|
Java Tempo
come posso fare una specie di cronometro dove i numeri cambiano ogni secondo graficamente in JavaSwing?
Ultima modifica di Pro7on : 13-06-2007 alle 10:00. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Requisiti: Java 5 o superiore. 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 buttonStop;
private Timer timer;
private long startTime;
public Cronometro ()
{
frame = new JFrame ("Cronometro");
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setSize (220, 140);
labelTime = new JLabel ();
labelTime.setFont (new Font ("SansSerif", Font.BOLD, 30));
labelTime.setHorizontalAlignment (JLabel.CENTER);
labelTime.setText ("0:00:00.0");
buttonStart = new JButton ("START");
buttonStop = new JButton ("STOP");
buttonStop.setEnabled (false);
panelButtons = new JPanel (new GridLayout (1, 2));
panelButtons.add (buttonStart);
panelButtons.add (buttonStop);
frame.add (labelTime, BorderLayout.CENTER);
frame.add (panelButtons, BorderLayout.SOUTH);
timer = new Timer (50, new ActionListener () {
public void actionPerformed (ActionEvent e) {
long diffTime = System.currentTimeMillis () - startTime;
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) {
timer.stop ();
buttonStart.setEnabled (true);
buttonStop.setEnabled (false);
}
});
frame.setVisible (true);
}
public static void main (String[] args)
{
SwingUtilities.invokeLater (new Runnable () {
public void run () {
new Cronometro ();
}
});
}
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 13-06-2007 alle 12:30. |
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
|
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Quote:
![]() Ps.: Pare Key Horstmann si sia accorto ieri dell'esistenza della norma del thread singolo in Swing http://weblogs.java.net/blog/cayhors...ngle_thre.html Mica male, considerato che lui è uno degli esperti...
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Più che altro per essere abbastanza sicuro che ogni decimo di secondo venga visualizzato.
Come si sa i timer, gestiti in un sistema ad eventi ... non è detto che siano precisi precisi. Supponiamo di usare 100 e che l'ultimo timer abbia causato la visualizzazione del decimo di secondo '6' e che magari ci mancava pochissimo al passaggio al '7'. Ora immaginiamo che il timer si "rilassi" un pochino. È possibile che il '7' non venga visualizzato ma venga visualizzato '8' al prossimo evento del timer. Si può anche mettere 100, eh! Non è mica il cronometro che usano alla NASA!
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 1105
|
Quote:
|
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Feb 2003
Città: Anche Chuck Norris usa Debian e Gnome
Messaggi: 1270
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:33.





















