Ir ao conteúdo
  • Cadastre-se
Main.cpp

Java JavaFX - contador infinito ascendente e descendente

Recommended Posts


Para criação de jogos, cronômetros,
relógios digitais, temporizadores,
ou qualquer programa onde se necessite
de um contador digital, apresento-lhes
este excelente contador ascendente e descendente
infinito e com retorno.
Este ótimo programa ainda conta com um botão
de duas funções, programado para pausar e continuar
o contador em pleno funcionamento, modificando
a cor do botão, dando a ideia de um botão apagado,
possui ainda, um placar digital colocado no canto
superior direito para indicar uma volta completa,
com isto, a cada subida e descida ele marca no placar
o número dos ciclos feitos, e isto segue infinitamente,
salvo se o usuário fechar o programa.
Bons programadores de java, e que já possuem bons
conhecimentos em JavaFX, tem plena liberdade de
fazerem modificações neste projeto a fim de que
se enquadre as suas pretensões, mas não se esqueçam
dos créditos ao autor do projeto que sou eu mesmo.

 

Veja abaixo uma imagem do programa em execução:

 

 

 

Veja abaixo um vídeo com o programa funcionando:

 

 

Veja abaixo o código do programa:

 

 import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.event.ActionEvent;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.event.EventHandler;
import javafx.util.Duration;
import javafx.animation.*;
import javafx.scene.input.MouseEvent;

public class PROJETO extends Application {
     private Timeline videoTick;
      int i = 0, k = 0, l = 1, load     = 1000;
      Boolean y           = false;
      Canvas canvas       = new Canvas ( 620, 350 );
      GraphicsContext ctx = canvas.getGraphicsContext2D ( );
      Pane root           = new Pane ( );
      Scene scene         = new Scene ( root, 620, 350,Color.BLACK );
      Text t_2            = new Text ( );
      Text t_3            = new Text ( );
      Circle btn_1 = new Circle ( 150, 300, 20 );
////////////////////////////////////////////////////////////////////////////
     public void Informe ( ) {
         t_2.setX ( 200 );
         t_2.setY ( 290 );
         t_2.setFill ( Color.WHITE );
         t_2.setText ( "Por: Samuel Lima\n"
                   + "xxxxx@xxxxxx.com\n"
                   +"\t\tMUITO OBRIGADO");    
         //Colocando efeito na fonte com css
         t_2.setStyle ( "-fx-font-style: italic;"
                   + "-fx-font-size: 15px;"
                   + "-fx-font-weight: bold;"
                   + " -fx-effect: innershadow( three-pass-box ,"
                   + " rgba(0,0,0,0.7) , 6, 0.0 , 0 , 4 );");
     }
    // /////////////////////////////////////////////////////////////////////////
   public void button_person_1 ( ) {
       EventHandler < MouseEvent > eventHandler_1 =
                 new EventHandler < MouseEvent > ( ) {
            @Override
            public void handle ( MouseEvent e ) {
                 if ( i == 0 ) {
                    videoTick.pause ( );
                      System.out.println ( "Pausado" );
                      btn_1.setFill ( Color.rgb ( 29, 111, 0 ) );
                      i++;
                 } else {            
                    videoTick.play ( );
                      System.out.println ( "Ligado" );
                      btn_1.setFill ( Color.rgb ( 0, 255, 0 ) );
                      i = 0;
                 }           
            }
       };
       btn_1.setFill ( Color.rgb ( 0, 255, 0 ) );
       btn_1.addEventFilter ( MouseEvent.MOUSE_CLICKED, eventHandler_1 );
   }
     // /////////////////////////////////////////////////////////////////////////
     //Método usado como clock criado por mim
     public int Sleep ( int x ) {
         Duration duration = Duration.millis ( x );
         videoTick = new Timeline ( new KeyFrame ( duration,
                   new EventHandler < ActionEvent > ( ) {
              public void handle ( ActionEvent actionEvent ) {
                        //Usando fonte em italic
                        ctx.setFont ( Font.font ( "alarm clock", FontWeight.NORMAL, 150 ) );
                   //Coluna, linha, comprimento, altura
                   ctx.clearRect (  50, 70, 1000, 300 );    
                   if ( k < 10 ) {
                        ctx.setStroke ( Color.LIME );
                        ctx.setLineWidth ( 4.0 );
                        ctx.setFill ( Color.LIME );
                        ctx.fillText (   "0", 270, 230 );
                        ctx.strokeText (  "0", 270, 230 );
                        ctx.setStroke ( Color.LIME );
                        ctx.setLineWidth ( 4.0 );
                        ctx.setFill ( Color.LIME );
                        ctx.fillText (  " " + k, 270, 230 );
                        ctx.strokeText ( " " + k, 270, 230 );
                   } if ( k > 9 ) {
                        ctx.setStroke ( Color.LIME );
                        ctx.setLineWidth ( 4.0 );
                        ctx.setFill ( Color.LIME );
                        ctx.fillText (  " " + k, 180, 230 );
                        ctx.strokeText ( " " + k, 180, 230 );
                   } if ( k >= 0 && y == false ) {
                        k++;
                   } if ( y == true ) {
                        k--;
                        if ( k == 0 ) {
                            y = false;
                            l++;
                        }
                   } if ( y == false && k == 21 ) {
                        k = 19;
                        y = true;
                   } if ( y == true ) {
                   t_3.setFont ( Font.font ( "alarm clock", FontWeight.NORMAL, 50 ) );
                   t_3.setX ( 480 );
                   t_3.setY ( 100 );
                   t_3.setFill ( Color.RED );
                   t_3.setText ( " " + l );
                   }
              }
         } ) );
         videoTick.setCycleCount ( Animation.INDEFINITE );
         videoTick.playFromStart ( );
         return k;
     }
     // /////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) {
         stage.setTitle ( "JAVAFX - CONTADOR ASCENDENTE E DESCENDENTE" );
         //Usando fonte em italic
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 22 ) );
         //Criando moldura em css
         root.setStyle ( "-fx-padding: 5;"
                   + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 10;"
                   + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;"
                   + "-fx-border-color: yellow;");
         ctx.setFill ( Color.RED );
         ctx.fillText ( "JAVAFX - CONTADOR ASCENDENTE E DESCENDENTE", 36, 50 );
         button_person_1 ( );
         Sleep ( load );
         Informe ( );
         root.getChildren ( ).addAll ( canvas, t_2, t_3, btn_1 );
         stage.setScene ( scene );
         stage.show ( );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String [ ] args ) {
         Application.launch ( args );
     }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×