JavaFX - Scaling Transformation



In the scaling transformation process, you either expand or compress the dimensions of the object. Scaling can be achieved by multiplying the original coordinates of the object with the scaling factor to get the desired result.

Scaling

Scaling Transformation in JavaFX

In JavaFX, scaling transformation is used to change the size of an object. This is applied using the Scale class in the javafx.scene.transform package. The Scale class represents an Affine object that preserves the original nodes points, lines and parallelism. This object scales coordinates by certain factors.

Let us see some examples demonstrating the scaling transformation in both 2D and 3D objects in JavaFX.

Example 1

Following is the program which demonstrates scaling in JavaFX. Here, we are creating 2 circles (nodes) at the same location with the same dimensions, but with different colors (Burlywood and Blue). We are also applying scaling transformation on the circle with a blue color.

Save this code in a file with the name ScalingExample.java.

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Circle; 
import javafx.scene.transform.Scale; 
import javafx.stage.Stage; 
         
public class ScalingExample extends Application {  
   @Override 
   public void start(Stage stage) {      
      //Drawing Circle1 
      Circle circle1 = new Circle(300, 135, 50);   
      
      //Setting the color of the circle 
      circle1.setFill(Color.BLUE);        
      
      //Setting the stroke width of the circle 
      circle1.setStrokeWidth(20);       
       
      //Drawing Circle2 
      Circle circle2 = new Circle(300, 135, 50); 
      
      //Setting the color of the circle 
      circle2.setFill(Color.BURLYWOOD); 
      
      //Setting the stroke width of the circle 
      circle2.setStrokeWidth(20);
      
      //Creating the scale transformation 
      Scale scale = new Scale(); 
      
      //Setting the dimensions for the transformation 
      scale.setX(1.5); 
      scale.setY(1.5); 
      
      //Setting the pivot point for the transformation 
      scale.setPivotX(300); 
      scale.setPivotY(135); 
       
      //Adding the scale transformation to circle1 
      circle1.getTransforms().addAll(scale); 
         
      //Creating a Group object  
      Group root = new Group(circle1, circle2); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300);  
      
      //Setting title to the Stage 
      stage.setTitle("Scaling transformation example"); 
          
      //Adding scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of the stage 
      stage.show(); 
   }      
   public static void main(String args[]){ 
      launch(args); 
   } 
} 

Compile and execute the saved java file from the command prompt using the following commands.

javac --module-path %PATH_TO_FX% --add-modules javafx.controls ScalingExample.java 
java --module-path %PATH_TO_FX% --add-modules javafx.controls ScalingExample

Output

On executing, the above program generates a JavaFX window as shown below.

Scaling Transformation

Example 2

Now, let us try to apply the scaling transformation on a 3D object, say a sphere. Here, we will try to create two spheres: one in its original size and another one resized after applying scaling.

Save this code in a file with the name ScalingExample3D.java.

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene;
import javafx.scene.shape.Sphere; 
import javafx.scene.transform.Scale; 
import javafx.stage.Stage; 
         
public class ScalingExample3D extends Application {  
   @Override 
   public void start(Stage stage) {      
      //Drawing Sphere1 
      Sphere sphere1 = new Sphere(100);  
      sphere1.setTranslateX(200); 
      sphere1.setTranslateY(150);
	  
      //Drawing Circle2 
      Sphere sphere2 = new Sphere(100);
	  sphere2.setTranslateX(200); 
      sphere2.setTranslateY(150);
      
      //Creating the scale transformation 
      Scale scale = new Scale(); 
      
      //Setting the dimensions for the transformation 
      scale.setX(0.5); 
      scale.setY(0.5); 
      
      //Setting the pivot point for the transformation 
      scale.setPivotX(300); 
      scale.setPivotY(150); 
       
      //Adding the scale transformation to circle1 
      sphere1.getTransforms().addAll(scale); 
         
      //Creating a Group object  
      Group root = new Group(sphere1, sphere2); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300);  
      
      //Setting title to the Stage 
      stage.setTitle("Scaling transformation example"); 
          
      //Adding scene to the stage 
      stage.setScene(scene); 
         
      //Displaying the contents of the stage 
      stage.show(); 
   }      
   public static void main(String args[]){ 
      launch(args); 
   } 
}

Compile and execute the saved java file from the command prompt using the following commands.

javac --module-path %PATH_TO_FX% --add-modules javafx.controls ScalingExample3D.java 
java --module-path %PATH_TO_FX% --add-modules javafx.controls ScalingExample3D

Output

On executing, the above program generates a JavaFX window as shown below.

Scaling Transformation
Advertisements