Текст по окружности - Java

Узнай цену своей работы

Формулировка задачи:

как отрисовать текст на Canvas по окружности, дуге?

Решение задачи: «Текст по окружности»

textual
Листинг программы
/** Main */
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
 
/**
 * Created by John on 7/11/2014.
 */
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        // Create Pane
        CircularText phrase = new CircularText("CIRCLED TEXT ",
                480, 480);
        phrase.setFont("Matrix");
        phrase.setTextSize(30);
 
        // Place clock and label in border pane
        GridPane pane = new GridPane();
        pane.setAlignment(Pos.CENTER);
        pane.setPadding(new Insets(15, 30, 30, 0));
        pane.setStyle("-fx-background-color: black");
        pane.getChildren().add(phrase);
 
        // Create a scene and place it in the stage
        Scene scene = new Scene(pane);
        primaryStage.setTitle("Exercise14_05");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
 
/** circularText class */
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
 
/**
 * Created on 7/11/2014.
 */
public class CircularText extends Pane {
    double textSize = 30;
    String string = "";
    String fontName = "";
    Font font = new Font("Times Roman", textSize);
    // Pane's width and height
    private double w = 250, h = 250;
 
    /** Create Constructor */
    public CircularText (String phrase, double w, double h) {
        this.w = w;
        this.h = h;
        this.string = phrase;
        textSize = (this.w / this.string.length()) * 2;
        paintText(this.string, this.font);
    }
 
    /** Set new font */
    public void setFont(String name) {
        Font font = new Font(name, textSize);
        this.font = font;
        this.fontName = name;
        paintText(this.string, this.font);
    }
 
    /** Return textSize */
    public double getTextSize() {
        return this.textSize;
    }
 
    /** Set textSize */
    public void setTextSize(double textSize) {
        this.textSize = textSize;
        Font font = new Font(fontName, textSize);
        this.font = font;
        paintText(this.string, this.font);
    }
 
    /** Return pane's width */
    public double getW() {
        return w;
    }
 
    /** Set pane's width */
    public void setW(double w) {
        this.w = w;
        textSize = (this.w / this.string.length()) * 2;
        paintText(this.string, this.font);
    }
 
    /** Return pane's height */
    public double getH() {
        return h;
    }
 
    /** Set pane's height */
    public void setH(double h) {
        this.h = h;
        textSize = (this.w / this.string.length()) * 2;
        paintText(this.string, this.font);
    }
 
    /** Paint the Letters */
    protected void paintText(String phrase, Font font) {
        // Initialize parameters
        double clockRadius = Math.min(w, h) * 0.8 * 0.5;
        double centerX = w / 2;
        double centerY = h / 2;
 
        // Draw circle
        Circle circle = new Circle(centerX, centerY, clockRadius);
        circle.setFill(null);
        circle.setStroke(null);
        getChildren().clear();
        getChildren().add(circle);
 
        // Place text in a circular pattern
        int i = 0;
        double degree = 360 / phrase.length();
        for (double degrees = 0; i < phrase.length(); i++, degrees += degree) {
            double pointX = circle.getCenterX() + circle.getRadius() *
                Math.cos(Math.toRadians(degrees));
            double pointY = circle.getCenterY() + circle.getRadius() *
                Math.sin(Math.toRadians(degrees));
            Text letter = new Text(pointX, pointY, phrase.charAt(i) + "");
            letter.setFont(font);
            letter.setFill(Color.LIME);
            letter.setRotate(degrees + 90);
            getChildren().add(letter);
        }
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5