Transformación JavaFX

El soporte de transformación JavaFX le permite transformar (traducir, rotar, escalar, cortar) nodos JavaFX adjuntos al gráfico de escena JavaFX. En este tutorial de transformación de JavaFX, analizaré más de cerca cómo funcionan las transformaciones en JavaFX.

Ejemplo de transformación JavaFX

Aquí hay un ejemplo completo de transformación JavaFX para mostrarle cómo funcionan las transformaciones JavaFX:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Transform;
import javafx.stage.Stage;

public class TransformationsExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    public void start(Stage primaryStage) {

        Rectangle rectangle = new Rectangle();
        rectangle.setX(200);
        rectangle.setY(200);
        rectangle.setWidth(300);
        rectangle.setHeight(400);
        rectangle.setStroke(Color.TRANSPARENT);
        rectangle.setFill(Color.valueOf("#00ffff"));

        double degrees = 30;
        double rotationPointX = 100;
        double rotationPointY = 100;
        Transform rotate = Transform.rotate(degrees, rotationPointX, rotationPointY);
        rectangle.getTransforms().add(rotate);

        Transform translate = Transform.translate(100, 0);
        rectangle.getTransforms().add(translate);

        Pane pane = new Pane();
        pane.getChildren().add(rectangle);

        Scene scene = new Scene(pane, 1024, 800, true);
        primaryStage.setScene(scene);
        primaryStage.setTitle("2D Example");

        primaryStage.show();
    }
}

Objetos de transformación

Una transformación JavaFX está representada por un objeto Transformación de algún tipo. La clase JavaFX Transform javafx.scene.transform.Transformcontiene algunos métodos de fábrica que puede utilizar para crear instancias de la clase Transform. Aquí hay un ejemplo:

Transform translate = Transform.translate(100, 0);

También hay algunas clases de transformación que puedes usar en lugar de los métodos de la fábrica Transform. Cubriré algunos de ellos en las siguientes secciones.

Agregar una transformación a un control JavaFX

Puede agregar una transformación a un control JavaFX agregando una instancia de Transformación al control mediante esta operación:

control.getTransforms().add(transformationObject);

Transformaciones integradas

JavaFX viene con un conjunto de transformaciones integradas que puedes utilizar. Estas transformaciones son:

  • Traducir
  • Girar
  • Escala
  • Sesgar

Explicaré algunas de estas transformaciones en las siguientes secciones.

Traducir transformación

La transformación JavaFX Translate "moverá" un nodo JavaFX desde su posición previa a la transformación a una nueva posición. Puede traducir un nodo JavaFX a lo largo del eje Y o X. La cantidad que traslada el Nodo a lo largo de estos ejes es la distancia que se mueve. A continuación se muestra un ejemplo de traducción de un ImageView JavaFX :

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.transform.Translate;
import javafx.stage.Stage;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class TranslateTransformationExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    public void start(Stage primaryStage) {

        ImageView imageViewOriginal  = createImageView();
        ImageView imageViewTranslated = createImageView();

        Translate translateTransform = new Translate();
        translateTransform.setX(200);
        translateTransform.setY(100);

        imageViewTranslated.getTransforms().add(translateTransform);

        Pane pane = new Pane();
        pane.getChildren().add(imageViewTranslated);
        pane.getChildren().add(imageViewOriginal);

        Scene scene = new Scene(pane, 1024, 800, true);
        primaryStage.setScene(scene);
        primaryStage.setTitle("2D Example");

        primaryStage.show();
    }

    private ImageView createImageView() {
        FileInputStream input = null;
        try {
            input = new FileInputStream("assets/media/abstract-5719221_640.jpg");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Image image = new Image(input);
        ImageView imageView = new ImageView(image);
        return imageView;
    }

}

Este ejemplo muestra 2 nodos ImageView con una posición previa a la transformación de 0,0, es decir, uno encima del otro. Después de la traducción, puede ver el ImageView traducido debajo del ImageView no transformado. La aplicación resultante será similar a esta:

Rotar transformación

La transformación JavaFX Rotate gira un nodo JavaFX alrededor de un punto de pivote. Aquí hay un ejemplo de transformación de rotación de JavaFX que muestra un ImageView rotado y no rotado:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class RotateTransformationExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    public void start(Stage primaryStage) {

        ImageView imageViewOriginal  = createImageView();
        ImageView imageViewTranslated = createImageView();

        Rotate rotateTransform = new Rotate();
        rotateTransform.setAngle(45);
        rotateTransform.setPivotX(0);
        rotateTransform.setPivotY(0);

        imageViewTranslated.getTransforms().add(rotateTransform);

        Pane pane = new Pane();
        pane.getChildren().add(imageViewTranslated);
        pane.getChildren().add(imageViewOriginal);

        Scene scene = new Scene(pane, 1024, 800, true);
        primaryStage.setScene(scene);
        primaryStage.setTitle("2D Example");

        primaryStage.show();
    }

    private ImageView createImageView() {
        FileInputStream input = null;
        try {
            input = new FileInputStream("assets/media/abstract-5719221_640.jpg");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Image image = new Image(input);
        ImageView imageView = new ImageView(image);
        return imageView;
    }

}

Así es como se verá la aplicación resultante:

Transformación de escala

La transformación de escala JavaFX escala un nodo JavaFX hacia arriba o hacia abajo en comparación con su tamaño natural. Una escala de 1,0 es lo mismo que el tamaño natural. Una escala por debajo de 1,0 es más pequeña que el tamaño natural. Una escala superior a 1,0 es mayor que el tamaño natural. Por ejemplo, una escala de 0,5 horizontalmente significa una escala a la mitad del tamaño natural. Una escala de 2,0 significa una escala para duplicar el tamaño. A continuación se muestra un ejemplo de transformación de escala de JavaFX que muestra un ImageView de JavaFX ampliado hasta 1,5 de su tamaño original horizontalmente (eje X) y reducido a 0,5 de su tamaño original verticalmente (eje Y):

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.transform.Scale;
import javafx.stage.Stage;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ScaleTransformationExample extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    public void start(Stage primaryStage) {

        ImageView imageViewOriginal = createImageView();
        ImageView imageViewScaled   = createImageView();

        Scale scaleTransformation = new Scale();
        scaleTransformation.setX(1.5);
        scaleTransformation.setY(0.5);
        scaleTransformation.setPivotX(0);
        scaleTransformation.setPivotY(0);

        imageViewScaled.getTransforms().add(scaleTransformation);

        Pane pane = new Pane();
        pane.getChildren().add(imageViewScaled);
        pane.getChildren().add(imageViewOriginal);

        Scene scene = new Scene(pane, 1024, 800, true);
        primaryStage.setScene(scene);
        primaryStage.setTitle("2D Example");

        primaryStage.show();
    }

    private ImageView createImageView() {
        FileInputStream input = null;
        try {
            input = new FileInputStream("assets/media/abstract-5719221_640.jpg");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        Image image = new Image(input);
        ImageView imageView = new ImageView(image);
        return imageView;
    }

}

La aplicación JavaFX resultante se verá así:

Supongo que te gusta

Origin blog.csdn.net/weiweiqiao/article/details/132697584
Recomendado
Clasificación