quarta-feira, 19 de setembro de 2018

JavaFX - movendo imagem com o mouse

Agora chegou a vez de mostrarmos um exemplo
em JavaFX de movimentação de imagem pelo mouse,
"drag and drop", já fizemos isto com objetos em
2D e 3D, mas com imagem este é o primeiro exemplo.
Como imagem estamos abrindo um gif animado que foi
criado por mim mesmo e postado no 4shared à alguns
anos atrás e esta imagem corre por cima de outra,
imagem, a imagem de fundo do programa que traz
o nome em 3D da maior biblioteca para interfaces
gráficas do momento, "JavaFX".
Coloquei limites nas coordenadas do mouse para
que a imagem fique presa dentro da janela,
e isto é muito importante neste tipo de projeto.
Já imaginou a quantidade de programas que podemos
fazer usando estes recursos que mostramos
pacientemente a todos os leitores do blog?

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 javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;

public class PROJETO extends Application {
     BorderPane root = new BorderPane ( );
     Scene scene = new Scene ( root, 600, 300 );
     Canvas canvas = new Canvas ( 600, 300 );
     GraphicsContext ctx = canvas.getGraphicsContext2D ( );
     Image imagem_1 = new Image ( "Palmeiras.gif" );
     ImageView imageview_1 = new ImageView ( imagem_1 );
     Image imagem_2 = new Image ( "Image8.jpg" );
     ImageView imageview_2 = new ImageView ( imagem_2 );
     double x = 0, y = 0;
     // /////////////////////////////////////////////////////////////////////////
     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, 240 );
         ctx.setFill ( Color.BLUE );
         ctx.fillText ( "Samuel Lima", 240, 240 );
         ctx.setFill ( Color.PINK );
         ctx.fillText ( "sa_sp10@hotmail.com", 200, 255 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( " MUITO OBRIGADO", 250, 280 );
     }
     // /////////////////////////////////////////////////////////////////////////
     public void carregaImagem ( ) {
         scene.setOnMousePressed ( new EventHandler < MouseEvent > ( ) {
              @Override
              public void handle ( MouseEvent mouseEvent ) {
                   x = imageview_1.getLayoutX ( ) - mouseEvent.getSceneX ( );
                   y =  imageview_1.getLayoutY ( ) - mouseEvent.getSceneY ( );
                   imageview_1.setCursor ( Cursor.CROSSHAIR );
              }
         } );
         scene.setOnMouseDragged ( new EventHandler < MouseEvent > ( ) {
              @Override
              public void handle ( MouseEvent mouseEvent ) {
                   if ( mouseEvent.getSceneX ( ) > 50 &&
                            mouseEvent.getSceneX ( ) < 550 ) {
                        imageview_1.setLayoutX ( mouseEvent.getSceneX ( ) + x );
                   }
                   if ( mouseEvent.getSceneY ( ) > 50 &&
                            mouseEvent.getSceneY ( ) < 250 ) {
                        imageview_1.setLayoutY ( mouseEvent.getSceneY ( ) + y );              
                   }
                   if ( mouseEvent.getSceneX ( ) == 50 ||
                            mouseEvent.getSceneX ( ) == 550 ) {
                   }
                   if ( mouseEvent.getSceneY ( ) == 50 ||
                            mouseEvent.getSceneY ( ) == 250 ) {   
                   }
              }
         } ); 
     }
     // /////////////////////////////////////////////////////////////////////////
     public void start ( Stage stage ) throws Exception {       
         stage.setTitle ( "JAVAFX - MOVENDO IMAGEM COM O MOUSE" );
         imageview_1.setX ( 40 );
         imageview_1.setY ( 70 );
         imageview_1.setFitWidth ( 80 );
         imageview_1.setFitHeight ( 80 );
         imageview_2.setX ( 10 );
         imageview_2.setY ( 10 );
         imageview_2.setFitWidth ( 580 );
         imageview_2.setFitHeight ( 280 );   
         imageview_2.setPreserveRatio ( false );
         //Usando fonte em italic
         ctx.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
                   FontPosture.ITALIC, 22 ) );               
         //Criando uma moldura retangular em canvas
         ctx.setStroke ( Color.BLUE );
         ctx.setLineWidth ( 10.0 );
         ctx.strokeRoundRect ( 5, 5, 590, 290, 5, 5 );
         ctx.setFill ( Color.RED );
         ctx.fillText ( "JAVAFX - MOVENDO IMAGEM COM O MOUSE", 70, 40 );
         carregaImagem ( );
         Informe ( );      
         root.getChildren ( ).addAll ( imageview_2, imageview_1 );
         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.