Foro sobre Java SE > CountDownTimer en JavaFX
http://www.asgteach.com/blog/?p=334
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
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
Hola,
En JavaFX no hay una clase como esta de Android ?
http://developer.android.com/reference/android/os/CountDownTimer.html
Saludos