Código fuente de Java del cronómetro
importar excepción Java.awt.headless;
importar Java.awt.borderlayout;
importar diseño Java.awt.flow ;
Importar evento de acción Java .
Importar evento de acción Java . /p>
/**
*Temporizador pequeño
*/
La clase pública TimerFrame extiende JFrame {
estática privada final String INITIAL _ LABEL _ TEXT = " 00:00:00 000 ";
//Calcular el número de hilos
hilo de conteo privado = nuevo hilo de conteo();
// p>
//Registrar la hora de inicio del programa
inicio del programa largo privado = hora actual millis();
//El programa. queda suspendido desde el principio.
inicio de pausa larga privada = inicio del programa;
//Tiempo total de pausa del programa
pausa larga privadaCount = 0;
JLabel privado ETIQUETA = new JLabel(INITIAL _ LABEL _ TEXT);
Botón de inicio y pausa del jbutton privado = new jbutton(" start ");
botón de reinicio del jbutton privado = new jbutton(" reset "); ");
escucha de acción privada startPauseButtonListener = nueva acción oyente(){
acción de anulación pública realizada (evento de acción e){
if (hilo. detenido ) {
pauseCount =(sistema . hora actual millis()-pauseStart);
thread.stopped = false
startpausebutton settext(" pausa " ). ;
} De lo contrario {
pausa inicio = sistema . hora actual millis();
thread.stopped = true
startpausebutton . settext(" continuar ");
}
}
};
escucha de acción privada resetButtonListener = nueva escucha de acción() {
Acción de anulación pública realizada (evento de acción e){
pauseStart = programStart
pauseCount = 0;
thread.stopped = true
ETIQUETA . settext(INITIAL _ ETIQUETA _ TEXTO);
startpausebutton . ;
Public TimerFrame(título de cadena) lanza HeadlessException {
Super(Title);
setDefaultCloseOperation(EXIT_ON_CLOSE);
p>
setLocation(200, 200);
setResizable(false);
configurar borde();
configurar etiqueta();
configurar borde();
configurar etiqueta();
p>
setupButtonsPanel();
startpausebutton .
botón de reinicio.
ener(escucha del botón de reinicio);
thread .start(); //El hilo de conteo siempre está en ejecución.
}
//Agregar un borde al panel de formulario
Private void setupBorder() {
Panel de contenido de JPanel = nuevo JPanel ( new BorderLayout());
panel de contenido. set border(border factory. createemptyborder(5, 5, 5, 5));
this.setContentPane(panel de contenido);
}
//Botones de configuración
Private void setupButtonsPanel() {
Panel JPanel = nuevo JPanel(nuevo diseño de flujo() );
panel . add(startPauseButton);
panel . >
}
//Etiqueta de configuración
Configuración de vacío privado() {
etiqueta alineación horizontal (constantes de oscilación. centro); >
label.setFont(new font(label.getFont().getName(), label.getFont().getStyle(), 40));
this.add(label,BorderLayout.
center);
}
//Entrada de programa
Public static void main(String[] args) {
Pruebe {
administrador de interfaz de usuario . setlookandfeel(administrador de interfaz de usuario . getsystemlookandfeelclassname());
} catch (Excepción e) {
e .
}
Timerframe = new timerframe("temporizador pequeño");
frame pack();
frame set visible(true);
}
Clase privada Counting Thread extiende el hilo {
public boolean detenido = true
Private CountingThread() {
setDaemon(true);
}
@override
Ejecución de vacío público(){
mientras (verdadero) {
Si (! Detenido){
largo transcurrido = tiempo actual millis()-program start-pauseCount;
label.setText(formato (transcurrido). ));
}
Prueba {
sleep(17); //Haz que el reloj parezca más caótico
} catch ( Excepción interrumpida e) {
e . printstacktrace();
salir(1); >
}
//Formato milisegundos
Formato de cadena privada (de larga duración) {
int horas, minutos, segundos, mili; p>
milli =(int)(transcurrido 1000);
transcurrido = transcurrido/1000;
segundo = (int)(tiempo transcurrido 60);
transcurrido = transcurrido/60;
minuto = (int)(tiempo 60);
transcurrido = transcurrido/60;
hora = (int ) (60 aprobados);
Formato de cadena de retorno (" 02d: 02d: 02d 03d ", hora, minuto, segundo, milímetro
}
}
}
Por favor acepte, gracias.