domingo, 22 de abril de 2018

JavaFX - contador crescente até 59


Este duplo contador faz suas contagens
entre 0 e 59 com retorno.
O código é didático e serve como auxílio
para aplicações onde se necessita de
um bom contador.

Veja um vídeo do programa funcionando:



Veja abaixo o código do programa:

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

/////////////////////////////////////////////////////////////////////////////
public class PROJETO extends Application {
     private static Timeline     videoTick_1;
     static int a = 0, b = 0, c = 0, d = 0, k = 0, w = 0;
     static String str_0 = "";
     static String str_1 = "";
     static Canvas canvas = new Canvas ( 490, 310 );
     static GraphicsContext           ctx           = canvas.getGraphicsContext2D ( );
     static BorderPane                borderPane    = new BorderPane ( );
     static Pane                           ro_ot         = new Pane ( );
     static Scene                     sce_ne        = new Scene ( ro_ot, 490, 310, Color.WHITE );
     static Text text1 = new Text ( ) ;
     // /////////////////////////////////////////////////////////////////////////
     public static int Apaga ( int tam_lin_ini, int tam_lin_fim,
              int tam_ini_col, int tam_fim_col, int cp, int at ) {
         int i, c;
         for ( i = tam_lin_ini; i < tam_lin_fim; i++ ) {
              for ( c = tam_ini_col; c < tam_fim_col; c++ ) {
                   // Coluna, linha, comprimento, altura
                   ctx.clearRect ( c, i, cp, at );
              }
         }
         return 0;
     }
////////////////////////////////////////////////////////////////////////////
     //Abaixo a função usada como clock criada por mim
     public static int Sleep_1 ( int x ) {    
         ctx.setFont ( Font.font ( "Tahoma", FontWeight.NORMAL, 40 ) );
         Duration duration = Duration.millis ( x );
         do{      
              videoTick_1 = new Timeline ( new KeyFrame ( duration,
                        new EventHandler < ActionEvent > ( ) {
                   public void handle ( ActionEvent actionEvent ) {
                        w += str_0.length ( );
                        str_0 += k;  
                        Apaga ( 220, 260, 0, 230 - w, 150, 60 );
                        ctx.setFill ( Color.BLUE );
                        ctx.fillText ( "0", 218, 250 );
                        if ( k > 9 ) {
                            //Apaga está apagando o "0" acima imprimido
                            //quando o contador chega no 10
                            Apaga ( 220, 260, 210, 300 - w, 150, 60 );
                            a = 25;
                        }
                        text1.setStyle("-fx-font: normal bold 20px 'serif' ");
                        ctx.setFill ( Color.BLUE );
                        ctx.fillText ( str_0, 240 - a, 250 );
                        str_0 = str_0.substring ( 0, w  );
                        k++;
                        System.out.println ( k );  
                        if ( k == 60 ){
                            //As variáveis são resetadas para
                            // o retorno do contador
                            k = 0;
                            a = 0;
                        }
                        b += str_1.length ( );
                        str_1 += c;  
                        ctx.setFill ( Color.RED );
                        ctx.fillText ( "0", 278, 250 );
                        if ( c > 9 ) {
                            //Apaga está apagando o "0" acima imprimido
                            //quando o contador chega no 10
                            Apaga ( 220, 260, 270, 300 - b, 150, 60 );
                            d = 25;
                        }
                        text1.setStyle("-fx-font: normal bold 20px 'serif' ");
                        ctx.setFill ( Color.RED );
                        ctx.fillText ( str_1, 300 - d, 250 );
                        str_1 = str_1.substring ( 0, b  );
                        c++;
                        System.out.println ( c );  
                        if ( c == 60 ){
                            //As variáveis são resetadas para
                            // o retorno do contador
                            c = 0;
                            d = 0;
                        }
                   }
              } ) );
              videoTick_1.setCycleCount ( Animation.INDEFINITE );
              videoTick_1.playFromStart ( );
              return k;
         }while ( true );  
     }
////////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) {
         stage.setTitle ( "JAVAFX - CONTADOR CRESCENTE ATÉ 59" );
         // Dando uns efeitos na moldura
         ro_ot.setStyle ( "-fx-padding: 5;" + "-fx-border-style: solid inside;"
                   + "-fx-border-width: 12;" + "-fx-border-insets: 5;"
                   + "-fx-border-radius: 5;" + "-fx-border-color: blue;" );
         ctx.setFont ( Font.font ( "Tahoma", FontWeight.NORMAL, 15 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "JAVAFX - CONTADOR CRESCENTE ATÉ 59", 120, 60 );
         Sleep_1 ( 1000 ); 
         ro_ot.getChildren ( ).addAll ( canvas, borderPane );
         stage.setScene ( sce_ne );
         stage.show ( );   
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String [ ] args ) {
         Application.launch ( args );
     }
}




Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.