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

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

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

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

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

textual
Листинг программы
  1. /** Main */
  2. import javafx.application.Application;
  3. import javafx.geometry.Insets;
  4. import javafx.geometry.Pos;
  5. import javafx.scene.Scene;
  6. import javafx.scene.layout.GridPane;
  7. import javafx.stage.Stage;
  8.  
  9. /**
  10.  * Created by John on 7/11/2014.
  11.  */
  12. public class Main extends Application {
  13.     @Override
  14.     public void start(Stage primaryStage) {
  15.         // Create Pane
  16.         CircularText phrase = new CircularText("CIRCLED TEXT ",
  17.                 480, 480);
  18.         phrase.setFont("Matrix");
  19.         phrase.setTextSize(30);
  20.  
  21.         // Place clock and label in border pane
  22.         GridPane pane = new GridPane();
  23.         pane.setAlignment(Pos.CENTER);
  24.         pane.setPadding(new Insets(15, 30, 30, 0));
  25.         pane.setStyle("-fx-background-color: black");
  26.         pane.getChildren().add(phrase);
  27.  
  28.         // Create a scene and place it in the stage
  29.         Scene scene = new Scene(pane);
  30.         primaryStage.setTitle("Exercise14_05");
  31.         primaryStage.setScene(scene);
  32.         primaryStage.show();
  33.     }
  34. }
  35.  
  36. /** circularText class */
  37. import javafx.scene.layout.Pane;
  38. import javafx.scene.paint.Color;
  39. import javafx.scene.shape.Circle;
  40. import javafx.scene.text.Font;
  41. import javafx.scene.text.Text;
  42.  
  43. /**
  44.  * Created on 7/11/2014.
  45.  */
  46. public class CircularText extends Pane {
  47.     double textSize = 30;
  48.     String string = "";
  49.     String fontName = "";
  50.     Font font = new Font("Times Roman", textSize);
  51.     // Pane's width and height
  52.     private double w = 250, h = 250;
  53.  
  54.     /** Create Constructor */
  55.     public CircularText (String phrase, double w, double h) {
  56.         this.w = w;
  57.         this.h = h;
  58.         this.string = phrase;
  59.         textSize = (this.w / this.string.length()) * 2;
  60.         paintText(this.string, this.font);
  61.     }
  62.  
  63.     /** Set new font */
  64.     public void setFont(String name) {
  65.         Font font = new Font(name, textSize);
  66.         this.font = font;
  67.         this.fontName = name;
  68.         paintText(this.string, this.font);
  69.     }
  70.  
  71.     /** Return textSize */
  72.     public double getTextSize() {
  73.         return this.textSize;
  74.     }
  75.  
  76.     /** Set textSize */
  77.     public void setTextSize(double textSize) {
  78.         this.textSize = textSize;
  79.         Font font = new Font(fontName, textSize);
  80.         this.font = font;
  81.         paintText(this.string, this.font);
  82.     }
  83.  
  84.     /** Return pane's width */
  85.     public double getW() {
  86.         return w;
  87.     }
  88.  
  89.     /** Set pane's width */
  90.     public void setW(double w) {
  91.         this.w = w;
  92.         textSize = (this.w / this.string.length()) * 2;
  93.         paintText(this.string, this.font);
  94.     }
  95.  
  96.     /** Return pane's height */
  97.     public double getH() {
  98.         return h;
  99.     }
  100.  
  101.     /** Set pane's height */
  102.     public void setH(double h) {
  103.         this.h = h;
  104.         textSize = (this.w / this.string.length()) * 2;
  105.         paintText(this.string, this.font);
  106.     }
  107.  
  108.     /** Paint the Letters */
  109.     protected void paintText(String phrase, Font font) {
  110.         // Initialize parameters
  111.         double clockRadius = Math.min(w, h) * 0.8 * 0.5;
  112.         double centerX = w / 2;
  113.         double centerY = h / 2;
  114.  
  115.         // Draw circle
  116.         Circle circle = new Circle(centerX, centerY, clockRadius);
  117.         circle.setFill(null);
  118.         circle.setStroke(null);
  119.         getChildren().clear();
  120.         getChildren().add(circle);
  121.  
  122.         // Place text in a circular pattern
  123.         int i = 0;
  124.         double degree = 360 / phrase.length();
  125.         for (double degrees = 0; i < phrase.length(); i++, degrees += degree) {
  126.             double pointX = circle.getCenterX() + circle.getRadius() *
  127.                 Math.cos(Math.toRadians(degrees));
  128.             double pointY = circle.getCenterY() + circle.getRadius() *
  129.                 Math.sin(Math.toRadians(degrees));
  130.             Text letter = new Text(pointX, pointY, phrase.charAt(i) + "");
  131.             letter.setFont(font);
  132.             letter.setFill(Color.LIME);
  133.             letter.setRotate(degrees + 90);
  134.             getChildren().add(letter);
  135.         }
  136.  
  137.     }
  138. }

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут