sábado, 27 de outubro de 2018

JavaFX - imagem limpando tela

Este programa usa uma imagem para limpeza de tela,
a imagem de fundo branco, é usada no lugar do
 clearRect (); do canvas.

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



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.event.EventHandler;
import javafx.scene.paint.Color;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.control.TextField;
import javafx.geometry.Insets;
import javafx.scene.layout.HBox;
import javafx.scene.image.Image;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import java.util.function.UnaryOperator;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
import java.awt.Toolkit;
////////////////////////////////////////////////////////////////////////////////
public class PROJETO extends Application {
     int a = -1, i = 0;      
     public int qnt;
     String str_0 = "";
     Canvas canvas = new Canvas ( 600, 300 );
     GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     BorderPane borderPane = new BorderPane ( );
     TextField textField_1 = new TextField ( );
     HBox hbox_1 = new HBox ( textField_1 );
     Pane root = new Pane ( );
     Scene scene = new Scene ( root, 600, 300, Color.WHITE );
     Image imagem_1 = new Image ( "FundoBranco.png" );
     // /////////////////////////////////////////////////////////////////////////
     public void Informe ( ) {
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 13 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "Por: ", 250, 255 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Samuel Lima", 280, 255 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "sa_sp10@hotmail.com", 250, 270 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "MUITO OBRIGADO", 270, 290 );
     }
     // /////////////////////////////////////////////////////////////////////////
     public void fill_Array ( int vet [ ] ) {
         fundo ( );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 20 ) );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Número para a posição ",80, 80 );  
         ctx.setFill ( Color.RED );
         ctx.fillText ( " " + ( a ), 300, 80 );
         //Vet [ 0 ] será o tamanho do array
         //então o primeiro número digitado
         //não entrará em suas posições.
         if ( a == vet [ 0 ] ) {
              textField_1 .setVisible ( false );
              for ( i = 1; i <= vet [ 0 ]; i++ ) {
                   System.out.print ( vet [ i ] + " " );   
                   str_0 += vet [ i ] + " ";
              }
              fundo ( );
              ctx.setFill ( Color.BLUE );
              ctx.fillText ( "Veja abaixo o array preenchido", 120, 110 );  
              ctx.setFill ( Color.RED );
              ctx.fillText ( str_0, 160, 150 );   
              Informe ( );
         }
         textField_1.clear ( );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void limitTextField ( TextField textField, int limit ) {
         UnaryOperator < Change > textLimitFilter = change -> {
              if ( change.isContentChange ( ) ) {
                   int newLength = change.getControlNewText ( ).length ( );
                   if ( newLength > limit ) {
                        String trimmedText = change.getControlNewText ( )
                                 .substring ( 0, limit );
                        change.setText ( trimmedText );
                        int oldLength = change.getControlText ( ).length ( );
                        change.setRange ( 0, oldLength );
                   }
              }
              return change;
         };
         textField.setTextFormatter ( new TextFormatter < Object > (
                   textLimitFilter ) );
     }
     // /////////////////////////////////////////////////////////////////////////
     public void fundo ( ) {
         /*
       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.
          */
         ctx.drawImage ( imagem_1, 20, 40, 580, 70, 20, 20, 570, 270 );
         ctx.setFill ( Color.RED );
         //Usando fonte em italic
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 20 ) );
         ctx.fillText ( "JAVAFX - PREENCHENDO ARRAY COM TEXTFIELD", 80, 50 );
     }
     // /////////////////////////////////////////////////////////////////////////
     public int textFieldArr ( int vet [ ] ) {
         // Textfield     
         hbox_1.setPadding ( new Insets ( 60, 0, 10, 325 ) );
         //Limita o textfield para no máximo duas colunas
         textField_1.setPrefColumnCount ( 2 );
         //Insere uma pequena mensagem ao usuário
         textField_1.setPromptText("arr");
         textField_1.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
              @Override
              public void handle ( KeyEvent event ) {
                   //Limita o textfield para no máximo
                   //dois dígitos em sua entrada
                   limitTextField ( textField_1, 2 );
                   // convertendo string para inteiro
                   if ( event.getCode ( ) == KeyCode.ENTER ) {       
                        //qnt recebe a entrada do textfield
                        //convertida para inteiro
                        qnt = Integer.parseInt ( textField_1.getText ( ) );       
                        //Se a entrada do textfield for um inteiro
                        //entre 0 e 99, o bloco abaixo é acionado
                        //executando tudo o que contem nele
                        if ( qnt > -1 && qnt <= 99 ) {
                            Toolkit.getDefaultToolkit ( ).beep ( );
                            a++;
                            vet [ a ] = qnt;
                            fill_Array ( vet );
                        }
                   }
              }
         } );
         root.getChildren ( ).addAll ( hbox_1 );
         return qnt;
     }
     // /////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) {
         int [ ] vet = new int [ 100 ];
         stage.setTitle ( "JAVAFX - PREENCHENDO ARRAY COM TEXTFIELD" );  
         // Dando uns efeitos na moldura
         root.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;" );
         //Com este comando a tela não se espande
         stage.setResizable ( false );
         fundo ( );
         ctx.setFont ( Font.font ( "Arial", FontWeight.NORMAL, 15 ) );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Total de números à inserir no array", 80, 80 );
         root.getChildren ( ).add ( canvas );
         textFieldArr ( vet );
         root.getChildren ( ).addAll ( borderPane );
         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.