A criação foi bem simples, segue aqui uma explicação rápida do código e em seguida o próprio código:
- O texto vai ficar em um Label, no programa chamamos ele de lblRelogio;
- Para transformar o objeto data em texto, precisamos de um SimpleDateFormat. Essa é uma classe bem bacana e ao criarmos uma instância da mesma, passamos uma String que representará a forma que a hora/data será representada. Há uma tabela na documentação dessa classe que mostra como podemos formatar a nossa data, no nosso caso usamos: hh:mm:ss a - que resulta no formato mostrado acima. Claro que há uma nova API de datas no Java 8, mas a API antiga ainda é muito usada!
- No método start (se não entende o que faz esse método, por favor, veja esse post) criamos uma Font para o lblRelogio. Essa fonte aceita parâmetros que definem se a fonte ficará em negrito ou alguma variação de negrito ou se a fonte vai ficar em itálico ou normal. Lembrando que é possível usar CSS também;
- Por fim, a chave do nosso código é a Timeline, que executa os KeyFrames no tempo passado como parâmetro. Um KeyFrame terá uma ação associada a ele e no nosso caso simplesmente chamamos o método atualizaHoras. A timeline executará "eternamente" o KeyFrame a cada 1 segundo.
Veja o codigo!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.fxapps.genetics; | |
import java.text.SimpleDateFormat; | |
import java.util.Date; | |
import javafx.animation.KeyFrame; | |
import javafx.animation.Timeline; | |
import javafx.application.Application; | |
import javafx.scene.Scene; | |
import javafx.scene.control.Label; | |
import javafx.scene.effect.DropShadow; | |
import javafx.scene.layout.StackPane; | |
import javafx.scene.paint.Color; | |
import javafx.scene.text.Font; | |
import javafx.scene.text.FontWeight; | |
import javafx.stage.Stage; | |
import javafx.util.Duration; | |
public class Relogio extends Application { | |
// criando o Label que vai informar as horas | |
private Label lblRelogio = new Label(); | |
// SimpleDateFormat é a classe do Java que transforma datas para Strings | |
// usando o formato passado | |
private SimpleDateFormat formatador = new SimpleDateFormat("hh:mm:ss a"); | |
// isso poderia ser emitido no Java 8 | |
public static void main(String[] args) { | |
launch(); | |
} | |
public void start(Stage stage) throws Exception { | |
// criamos a fonte usando o método de fábrica. | |
Font font = Font.font("Arial", FontWeight.EXTRA_BOLD, 60); | |
lblRelogio.setFont(font); | |
// vamos colocar um pequeno efeito no label pra deixar ele bonitin | |
lblRelogio.setEffect(new DropShadow(10, Color.RED)); | |
// agora ligamos um loop infinito que roda a cada segundo e atualiza nosso label chamando atualizaHoras. | |
KeyFrame frame = new KeyFrame(Duration.millis(1000), e -> atualizaHoras()); | |
Timeline timeline = new Timeline(frame); | |
timeline.setCycleCount(Timeline.INDEFINITE); | |
timeline.play(); | |
// por fim criamos o stage, a scene com um stack pane e colocamos o nosso label lá | |
Scene cena = new Scene(new StackPane(lblRelogio), 450, 150); | |
stage.setScene(cena); | |
stage.show(); | |
} | |
private void atualizaHoras() { | |
Date agora = new Date(); | |
lblRelogio.setText(formatador.format(agora)); | |
} | |
} |
Obrigado meu amigo, estava precisando muito...
ResponderExcluirvlw, obrigado
ResponderExcluirMuito obrigado!
ResponderExcluir