terça-feira, 21 de agosto de 2018

JavaFX - botões personalizados

Podemos criar nossos próprios botões
em JavaFX, isto mesmo.
Nem sempre somos obrigados a utilizar
um botão da classe Button.
A explicação pra isto e o fato
de estarmos utilizando Tratamento de evento
pelos cliques do mouse (nosso caso).
Arrastar, mover, passar o cursor sobre,
um componente são tratamentos de eventos,
e o JavaFX nos dá suporte total pra isto.
Neste exemplo, criamos três figuras
geométricas e adicionamos à entrada do mouse,
assim ao clicarmos sobre estas figuras
um evento é chamado informando o estado
da imagem.
Cada botão tem dois estados:
"0 e 1", "Aceso e apagado",
que também poderia ser ligado ou desligado.
Mais informações serão adquiridas
por todos que compilarem este programa.


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



Veja abaixo um vídeo com o funcionamento do programa:


Veja abaixo o código do programa: 


import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Polygon;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.stage.Stage;
import javafx.event.EventHandler;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;

public class PROJETO extends Application {
     Pane root = new Pane ( );
     Scene scene = new Scene ( root, 600, 310, Color.WHITE );
     Canvas canvas = new Canvas ( 600, 310 );
     GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     Circle btn_1 = new Circle ( 250, 200, 20 );
     Rectangle btn_2 = new Rectangle ( 300, 185, 35, 35 );
     Polygon btn_3 = new Polygon ( );
     int i = 0, j = 0, k = 0;
     // /////////////////////////////////////////////////////////////////////////
     public void Informe ( ) {
         ctx.setFont ( Font.font ( "Arial", FontWeight.BOLD, 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 button_person_1 ( ) {
         EventHandler < MouseEvent > eventHandler_1 =
                   new EventHandler < MouseEvent > ( ) {
              @Override
              public void handle ( MouseEvent e ) {
                   if ( i == 0 ) {
                        System.out.println ( "Led aceso" );
                        btn_1.setFill ( Color.rgb ( 0, 255, 0 ) );
                        i++;
                   } else {              
                        System.out.println ( "Led apagado" );
                        btn_1.setFill ( Color.rgb ( 29, 111, 0 ) );  
                        i = 0;
                   }            
              }
         };
         btn_1.setFill ( Color.rgb ( 29, 111, 0 ) );  
         btn_1.addEventFilter ( MouseEvent.MOUSE_CLICKED, eventHandler_1 );
     }
     // /////////////////////////////////////////////////////////////////////////
     public void button_person_2 ( ) {
         EventHandler < MouseEvent > eventHandler_2 =
                   new EventHandler < MouseEvent > ( ) {
              @Override
              public void handle ( MouseEvent e ) {
                   if ( j == 0 ) {
                        System.out.println ( "Led aceso" );
                        btn_2.setFill ( Color.rgb ( 254, 0, 0 ) );   
                        j++;
                   } else {
                        System.out.println ( "Led apagado" );
                        btn_2.setFill ( Color.rgb ( 139, 0, 0 ) );   
                        j = 0;
                   }
              }
         };
         btn_2.setFill ( Color.rgb ( 139, 0, 0 ) );   
         btn_2.addEventFilter ( MouseEvent.MOUSE_CLICKED, eventHandler_2 );
     }
     // /////////////////////////////////////////////////////////////////////////
     public void button_person_3 ( ) {
         btn_3.getPoints ( ).addAll (
                   new Double [ ] { 20.0, 5.0, 5.0, 40.0, 40.0, 40.0, } );
         //Localização - coluna
         btn_3.setLayoutX ( 360 );
         //Localização - linha
         btn_3.setLayoutY ( 180 );
         EventHandler < MouseEvent > eventHandler_3 =
                   new EventHandler < MouseEvent > ( ) {
              @Override
              public void handle ( MouseEvent e ) {
                   if ( k == 0 ) {
                        System.out.println ( "Led aceso" );
                        btn_3.setFill ( Color.rgb ( 255,255,0 ) );   
                        k++;
                   } else {     
                        System.out.println ( "Led apagado" );
                        btn_3.setFill ( Color.rgb ( 255, 128, 0 ) ); 
                        k = 0;
                   }
              }
         };
         btn_3.setFill ( Color.rgb ( 255, 128, 0 ) ); 
         btn_3.addEventFilter ( MouseEvent.MOUSE_CLICKED, eventHandler_3 );
     }
     // /////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) {
         // Configurando um título para o stage
         stage.setTitle ( "JAVAFX - BOTÕES PERSONALIZADOSS" );
         // Criando uma moldura retangular em canvas
         ctx.setStroke ( Color.BLUE );
         ctx.setLineWidth ( 10.0 );
         ctx.strokeRoundRect ( 5, 5, 590, 300, 5, 5 );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 15 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "JAVAFX - BOTÕES PERSONALIZADOS", 190, 40 );
         Informe ( );
         button_person_1 ( );
         button_person_2 ( );
         button_person_3 ( );
         root.getChildren ( ).addAll ( canvas, btn_1, btn_2, btn_3 );
         stage.setScene ( scene );
         stage.show ( );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String [ ] args ) {
         Application.launch ( args );
     }
}