domingo, 19 de agosto de 2018

JavaFX - capturando as coordenadas do mouse

Capturar as coordenadas do mouse
é sempre muito útil, principalmente,
quando estamos desenhando polígonos,
ou inserindo imagens no scene.
Este programa se torna um ferramenta
de trabalho muito necessária
quando o programador já está num nível
mais avançado.
Minha sugestão é que criem uma classe,
e sempre que necessário invoque-a
onde for preciso, e no término,
a mesma pode ser removida sem problemas
do programa que for compilado.


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


Vídeo com o funcionamento do programa:


Veja abaixo o código do programa:


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

public class PROJETO extends Application {
     Pane root = new Pane ( );
     Scene scene = new Scene ( root, 600, 310 );
     Canvas canvas = new Canvas ( 600, 310 );
     GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     // /////////////////////////////////////////////////////////////////////////
   public void Informe ( ) {
       ctx.setFont ( Font.font ( "Arial", FontWeight.BOLD, 13 ) );
       ctx.setFill ( Color.RED );
       ctx.fillText ( "Por: ", 200, 230 );
       ctx.setFill ( Color.BLUE );
       ctx.fillText ( "Samuel Lima", 240, 230 );
       ctx.setFill ( Color.BLACK );
       ctx.fillText ( "sa_sp10@hotmail.com", 200, 245 );
       ctx.setFill ( Color.RED );
       ctx.fillText ( " MUITO OBRIGADO", 250, 280 );
   }
   // /////////////////////////////////////////////////////////////////////////
     EventHandler < MouseEvent > mouseHandler =
              new EventHandler < MouseEvent > ( ) {
         @Override
         public void handle ( MouseEvent mouseEvent ) {
              ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                        FontPosture.ITALIC, 15 ) );
              //Apaga uma área pré-definida
               //Coluna, linha, comprimento, altura
              ctx.clearRect (  30, 45, 120, 50 );                 
              //System.out.println (  "\n" + "Y => "
                        //+ mouseEvent.getX ( ) + "\nX => "
                        //+ mouseEvent.getSceneY ( )
                        //);         
              ctx.setFill ( Color.BLACK );
              ctx.fillText ( "Y => ", 40, 60 );
              ctx.fillText ( "X => ", 40, 80 );
              ctx.setFill ( Color.RED );
              ctx.fillText ( " " + mouseEvent.getSceneY ( ), 80, 60 );
              ctx.fillText ( " " + mouseEvent.getX ( ), 80, 80 );            
         }
     };
     // /////////////////////////////////////////////////////////////////////////
     public void detecta_coord ( ) {
         scene.setOnMouseMoved ( mouseHandler );
         scene.setOnMouseReleased ( mouseHandler );
     }
     // /////////////////////////////////////////////////////////////////////////
     @Override
     public void start ( Stage stage ) {
         // Configurando um título para o stage
         stage.setTitle ( "JAVAFX - CAPTURANDO AS COORDENADAS DO MOUSE" );
         // Criando uma moldura retangular em canvas
         ctx.setStroke ( Color.BLACK );
         ctx.setLineWidth ( 10.0 );
         ctx.strokeRoundRect ( 10, 10, 580, 290, 10, 10 );
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 15 ) );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "JAVAFX - CAPTURANDO AS COORDENADAS DO MOUSE", 110, 40 );
         Informe ( );
         detecta_coord ( );
         root.setStyle (
                   "-fx-background-color:"
                            + " radial-gradient(center 50% 50% ,"
                            + " radius 5% , repeat,"
                            + " #fffaf0, LIGHTGRAY, CYAN);");
         root.getChildren ( ).addAll ( canvas );
         stage.setScene ( scene );
         stage.show ( );
     }
     // /////////////////////////////////////////////////////////////////////////
     public static void main ( String [ ] args ) {
         launch ( args );
     }
}

Nenhum comentário:

Postar um comentário

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