domingo, 16 de setembro de 2018

JavaFX - dígitos imagens II

Desenhamos os dez dígitos de ( 0, 9 ) numa imagem
usando mesmo o JavaFX e salvamos com o nome:
"DígitosVermelhos.png" .
Fizemos o mapeamento de cada dígito contido na imagem
e desenhamos num ponto estratégico de nossa janela.
Ora, isto foi uma sugestão de um membro deste grupo,
que me informou que com apenas uma imagem seria
possível fazer este programa, na verdade já fizemos
este trabalho antes mas na hora de criar o programa:
"JavaFX - dígitos imagens" , nem me passou na caneça
de fazer assim.
Agora o que mais me chamou a atenção foi o fato dele
ter sido tão bem recebido pelos programadores, 
 já está entre os quatro mais visualizados entre os mais 
de 310 posts que temos no nosso blog de java.

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



Veja abaixo um vídeo do programa em execução:


Veja abaixo o código do programa:


import java.io.FileNotFoundException;

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

public class PROJETO extends Application {
     Canvas canvas = new Canvas ( 600, 310 );
     GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     Pane root = new Pane ( );
     Scene scene = new Scene ( root );
     private Timeline videoTick;
     int k = 0, l = 0, load     = 1000;
     Boolean y = false;
     Image imagem_1 = new Image ( "Image2.png" );
     Image imagem_2 = new Image ( "DígitosVermelhos.png" );
     // /////////////////////////////////////////////////////////////////////////
     public void Informe ( ) {
         //Usando fonte em italic
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 13 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "Por: ", 200, 250 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Samuel Lima", 240, 250 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "sa_sp10@hotmail.com", 200, 265 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( " MUITO OBRIGADO", 250, 290 );
     }
     // /////////////////////////////////////////////////////////////////////////
     public void FuncUnidade ( ) {
         /*
         Os quatro primeiros parâmetros são:
        Coluna e linha, largura e altura de onde
        pretende-se iniciar o desenhao.  
        ============================================ 
        Os quatro últimos parâmetros são:
        Os dois primeiros:
        Coluna e linha aonde se deseja aplicar o desenho da imagem
        Os dois últimos:
        Largura e altura da imagem a ser desenhada.
          */      
         if ( k == 1 )
              //Zero da direita
              ctx.drawImage ( imagem_2, 40, 40, 130, 150, 310, 100, 130, 150 );
         if ( k == 2 )
              //Dígito 1 da direita
              ctx.drawImage ( imagem_2, 150, 40, 70, 150, 310, 100, 70, 160 );
         if ( k == 3 )
              //Dígito 2 da direita
              ctx.drawImage ( imagem_2, 220, 40, 130, 150, 310, 100, 130, 150 );
         if ( k == 4 )
              //Dígito 3 da direita
              ctx.drawImage ( imagem_2, 340, 40, 130, 150, 310, 100, 130, 150 );
         if ( k == 5 )
              //Dígito 4 da direita
              ctx.drawImage ( imagem_2, 460, 40, 130, 150, 310, 100, 130, 160 );
         if ( k == 6 )
              //Dígito 5 da direita
              ctx.drawImage ( imagem_2, 30, 180, 130, 150, 310, 90, 130, 150 );
         if ( k == 7 )
              //Dígito 6 da direita
              ctx.drawImage ( imagem_2, 140, 180, 130, 150, 310, 90, 130, 150 );
         if ( k == 8 )
              //Dígito 7 da direita
              ctx.drawImage ( imagem_2, 260, 180, 110, 150, 310, 90, 110, 150 );
         if ( k == 9 )
              //Dígito 8 da direita
              ctx.drawImage ( imagem_2, 360, 180, 130, 150, 310, 90, 130, 150 );
         if ( k == 10 )
              //Dígito 9 da direita
              ctx.drawImage ( imagem_2, 480, 180, 120, 150, 310, 90, 130, 150 );
     }
     // /////////////////////////////////////////////////////////////////////////
     //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 ) {
                   k++;
                   ctx.clearRect ( 20, 80, 560, 150 );
                   if ( k < 11 ) {
                        //Zero da esquerda
                        ctx.drawImage ( imagem_2, 40, 40, 130, 150, 210, 100, 130, 150 );
                        FuncUnidade ( );
                   }
                   if ( k == 11 ) {
                        k = 1;
                        l++;
                   }   
                   if ( l == 1 ) {
                        ctx.clearRect ( 20, 80, 560, 150 );
                        //Dígito 1 da esquerda
                        ctx.drawImage ( imagem_2, 150, 40, 70, 150, 210, 100, 70, 150 );
                        FuncUnidade ( );
                   }            
                   if ( l == 2 ) {
                        ctx.clearRect ( 20, 80, 560, 150 );
                        //Dígito 2 da esquerda
                        ctx.drawImage ( imagem_2, 220, 40, 130, 150, 210, 100, 130, 150 );
                        FuncUnidade ( );
                   }       
                   if ( l == 3 ) {
                        //Zero da direita
                        ctx.drawImage ( imagem_2, 40, 40, 130, 150, 310, 100, 130, 150 );
                        //Zero da esquerda
                        ctx.drawImage ( imagem_2, 40, 40, 130, 150, 210, 100, 130, 150 );
                        l = 0;
                        k = 1;
                   }
              }
         } ) );
         videoTick.setCycleCount ( Animation.INDEFINITE );
         videoTick.playFromStart ( );
         return k;
     }
     // /////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) throws FileNotFoundException {
         stage.setTitle ( "JAVAFX - DÍGITOS IMAGENS II" );
         //Criando uma moldura retangular em canvas
         ctx.drawImage ( imagem_1, 20, 40, 580, 70, 30, 30, 580, 70 );
         ctx.setStroke ( Color.BLUE );
         ctx.setLineWidth ( 10.0 );
         ctx.strokeRoundRect ( 10, 10, 580, 290, 10, 10 );
         Sleep ( load );
         Informe ( );
         root.getChildren ( ).add ( canvas );
         stage.setScene ( scene );
         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.