Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > CountDownTimer en JavaFX

Hola,

En JavaFX no hay una clase como esta de Android ?

http://developer.android.com/reference/android/os/CountDownTimer.html

Saludos

diciembre 22, 2014 | Unregistered CommenterJavier

http://www.asgteach.com/blog/?p=334

diciembre 22, 2014 | Registered Commenterchoces

Gracias choces ese lo he estado estudiando y algunos más como este que estoy probando ahora, http://pastebin.com/EP6k90B6

La duda que tengo es como darle este formato 00:00:00 (HH:mm:ss) . Para además de segundos poder añadir horas y minutos.

Saludos

diciembre 22, 2014 | Unregistered CommenterJavier

Hola de nuevo,

Con esto me podría valer:

private SimpleStringProperty timeSeconds = new SimpleStringProperty("00:00:00");
private SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");

Pero es que no sé como pasarle al KeyValue del TimeLine el SimpleStringProperty ya que como lo tengo solo acepta un SimpleIntegerProperty.

Explico mejor lo que estoy haciendo a ver si me pueden dar algo de luz:

Tengo una pantalla donde hay 3 botones (5, 30 y limpiar), cuando se acciona 5 o 30 añade esos minutos a un label que contiene el tiempo contratado "label_contract" es este formato HH:mm.

Luego hay un botón "Start" que cuando se acciona deshabilita los botones anteriores (para que el usuario no pueda cambiar el tiempo contratado una vez se inicia el servicio). Este obtiene un objeto Date a partir del formato del Label "time_contract". Ese Date de momento lo estoy convirtiendo a segundos para probar el Timeline, pero ahí es donde tengo la duda.

Este es el método que añade el tiempo contratado al Label:
private void appendMinutes(int m) {
Date date = null;
try {
date = new SimpleDateFormat("HH:mm").parse(time_contract.getText());
} catch (ParseException e) {
e.printStackTrace();
}
Calendar calendarDate = Calendar.getInstance();
calendarDate.setTime(date);
calendarDate.add(Calendar.MINUTE, m);
int hour = calendarDate.get(Calendar.HOUR);
int minute = calendarDate.get(Calendar.MINUTE);
String shour = String.valueOf(hour);
String sminute = String.valueOf(minute);
if(shour.length()<=1){shour = "0"+shour;}
if(sminute.length()<=1){sminute="0"+sminute;}
time_contract.setText(shour + ":" + sminute);
}

Este es el código que inicia el TimeLine:
// Start Counter Animation
// Get Date from Contract Label
Date date = null;
try {
date = new SimpleDateFormat("HH:mm").parse(time_contract.getText());
} catch (ParseException e) {
e.printStackTrace();
}
totalSeconds = new SimpleIntegerProperty((int) TimeUnit.MILLISECONDS.toSeconds(date.getTime()));
time_left.textProperty().bind(totalSeconds.asString());
if (timeline != null) {
timeline.stop();
}
timeline = new Timeline();
timeline.getKeyFrames().add(
new KeyFrame(Duration.seconds((int) TimeUnit.MILLISECONDS.toSeconds(date.getTime())+1),
new KeyValue(totalSeconds, 0)));
timeline.setOnFinished(new EventHandler<ActionEvent>(){

@Override
public void handle(ActionEvent arg0) {
System.out.println("Motor Apagado!");
time_left.textProperty().bind(timeSeconds);
}
});
timeline.playFromStart();

Hasta aquí todo funciona solo que en el Label solo se muestran los segundos y quisiera que además se mostrarán los minutos y las horas. Solo me falta eso.

He probado a enganchar el SimpleStringProperty al Label time_left así:
time_left.textProperty().bind(timeSeconds);

Y más abajo en new KeyValue a dejarlo así:
new KeyValue(timeSeconds, 0)));

Pero me da error:
The constructor KeyValue(SimpleStringProperty, int) is undefined

Entonces mi pregunta es ¿Cmo tengo que crear el KeyFrame para que me muestre HH:mm?

Saludos

diciembre 23, 2014 | Unregistered CommenterJavier