Текст по окружности - 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);
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д