quinta-feira, 26 de julho de 2018

JavaFx - utilizando canvas


O pacote javafx.scene.canvas
possui entre outras, a classe
GraphicsContext que é usada
para criação de imagens gráficas.
Como a Canvas é uma subclasse de nó,
ela pode ser usada sem problemas no
gráfico de cena do JavaFx.
GraphicsContext com seus recursos
poderosos é considerado o objeto
principal do Canvas.
O programador sempre deve especificar
obrigatoriamente a largura e a altura
e a localização do nó Canvas que será o tamanho

da imagem que se deseja obter.
Aqui está um exemplo do que se pode
fazer com o canvas, mas isto não é nada
se considerarmos as possibilidades de criação

de polígonos complexos
limitado apenas pela imaginação e
capacidade do programador.


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.scene.effect.Reflection;
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;

public class PROJETO extends Application {
         Canvas canvas = new Canvas ( 600, 400 );
         GraphicsContext ctx = canvas.getGraphicsContext2D ( );
         Pane root = new Pane ( );
         Scene scene = new Scene ( root );
         Reflection reflection = new Reflection();
     //@Override
     public void start ( Stage stage ) {
         stage.setTitle ( "JAVAFX - UTILIZANDO CANVAS" );
         //Usando fonte em italic
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 15 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "JAVAFX - UTILIZANDO CANVAS", 190,30 );
         //Criando uma moldura retangular
         ctx.setStroke ( Color.PINK );
         ctx.setLineWidth ( 10.0 );
         ctx.strokeRoundRect ( 10, 10, 580, 380, 10, 10 );
         //Criando outra moldura de menor tamanho
         ctx.setStroke ( Color.BLUE );
         ctx.setLineWidth ( 2.0 );
         ctx.strokeRoundRect ( 35, 35, 530, 330, 10, 10 );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 12 ) );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Retângulo", 90, 60 );        
         ctx.setLineWidth ( 4.0 );
         ctx.setFill ( Color.AQUA );
         //Desenhando um retângulo
         ctx.fillRect ( 90, 70, 140, 40 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Sem preenchimento", 90, 130 );    
         ctx.setStroke ( Color.BLUE );
         // Desenhando um retângulo sem preenchimento
         ctx.strokeRect ( 90, 140, 140, 40 );     
         ctx.fillText ( "Com cantos arredondados", 90, 200 );
         ctx.setStroke ( Color.CORAL );
         // Desenhando um retângulo com cantos arredondados
         ctx.strokeRoundRect ( 90, 210, 140, 40, 10, 10 );     
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Quadrado", 90, 270 );
         ctx.setStroke ( Color.YELLOW );
         //Desnhando um quadrado com cantos arredondados
         ctx.strokeRoundRect ( 90, 280, 40, 40, 10, 10 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Linha", 300, 60 );
         ctx.setStroke ( Color.BLACK );
         //Largura da linha
         ctx.setLineWidth ( 2.0 );
         // Desenhando uma linha
         ctx.strokeLine ( 400, 70, 300, 70 );     
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Elipse", 300, 90 );
         ctx.setStroke ( Color.GREEN );
         // Desenhando uma elipse
         ctx.strokeOval ( 300, 100, 50, 30 );     
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Com preenchimento", 300, 150 );
         ctx.setFill ( Color.BLUE );
         // Desenhando uma elipse com preenchimento
         ctx.fillOval ( 300, 160, 50, 30 );       
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Círculo", 300, 210 );
         ctx.setStroke ( Color.DARKGRAY );
         // Desenhando um círculo
         ctx.strokeOval ( 300, 220, 50, 50 );     
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Com preenchimento", 300, 290 );
         ctx.setFill ( Color.DARKGRAY );
         // Desenhando um círculo com preenchimento
         ctx.fillOval ( 300, 300, 50, 50 );
         ctx.setFill ( Color.BLACK );
         ctx.fillText ( "Por: Samuel Lima", 80, 340 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "sa_sp10@hotmail.com", 80, 355 );
         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.