import javafx.application.Application;
import javafx.scene.ImageCursor;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.StackPane;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.stage.Stage;


public class CursorScaling extends Application {

  @Override
  public void start(Stage stage) {
    final StackPane pane = new StackPane();

    // create a 1.5em x 1.5em rectangle for reference
    final Rectangle reference = new Rectangle();
    reference.setWidth(Font.getDefault().getSize() * 1.5);
    reference.setHeight(Font.getDefault().getSize() * 1.5);
    reference.setStyle("-fx-fill:red");

    // add an ImageCursor containing an 18px x 18px png
    pane.getChildren().add(reference);
    pane.setCursor(new ImageCursor(new Image(getClass().getResource("/cursor.png").toExternalForm())));

    final Scene scene = new Scene(pane, 200, 200);
    stage.setScene(scene);
    stage.show();
  }

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