Повернуть текст на холсте - Java

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

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

Столкнулся с проблемой, на холсте ни как не поворачивается текст на определенный угол такая же ситуация и с линией, но если линию на холсте можно повернуть задав разные координаты, то у текста всего три координаты, которые не влияют на угол поворота есть ли какой способ повернуть текст? и одну созданную линию из трех существующих? пробовал
gc.setRotate(90);
// текст так повернулся что вообще пропал, и таким способом вращается весь графический контент, соответственно для одной линии или текста графический контент нужно повернуть в обратную сторону, что по моему не лучшее решение
import javafx.application.*;
import javafx.application.Application;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.Scene;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.scene.effect.*;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.scene.text.*;
import javafx.geometry.*;
import javafx.event.*;
import javafx.scene.canvas.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.Cursor;
import java.awt.event.InputEvent;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.scene.shape.*;
import javafx.scene.transform.Scale;
import javafx.scene.transform.Translate;
import javafx.scene.Group;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.event.EventHandler;
import javafx.scene.input.InputEvent.*;
import javafx.scene.Node;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.PerspectiveTransform;
import javafx.stage.Stage; 
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.scene.input.KeyEvent; // пакет обработки нажатий с клавы javafx
import javafx.util.converter.*;
import javafx.scene.input.*;
import java.util.Scanner;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.file.*;
import java.net.*;
import java.text.*;
import javafx.util.*;
import java.util.regex.Pattern;
import javafx.fxml.FXML;
import javafx.scene.canvas.*;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.image.Image;
import javafx.geometry.Insets;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.Tooltip;
import javafx.scene.image.Image;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.AnchorPane;
import javafx.scene.media.AudioClip;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import java.time.LocalDate;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.text.Text.*;
import javafx.scene.transform.Transform.*;
import javafx.scene.transform.Rotate;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellEditEvent;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.geometry.HorizontalDirection;

public class ex1 extends Application {
GraphicsContext gc;
Canvas c;
 
public void K(GraphicsContext gc) {
gc.setStroke(Color.BLACK);
gc.setLineWidth(1.5);
gc.strokeLine(90, 63, 200, 63);
gc.strokeLine(90, 63, 250, 63);
gc.strokeLine(90, 63, 300, 63);
 
Text t = new Text("Пример текста");
t.setRotate(90);
Rotate ro = new Rotate();
ro.setAngle(90);
t.getTransforms().addAll(ro);
 
gc.setFont(new Font(20));
gc.setFill(Color.BLACK);
gc.fillText("" +t.getText(), 90, 200);
}

public static void main(String[] args) {
launch(args);
}
public void start(Stage myStage) throws Exception {
myStage.setTitle("Title");
 
AnchorPane rootPane = new AnchorPane();
Scene myScene = new Scene(rootPane, 600, 500);
myStage.setScene(myScene);
 
c = new Canvas(550, 500);
gc = c.getGraphicsContext2D( );
K(gc);
 
AnchorPane.setLeftAnchor(c, 10.0);
AnchorPane.setTopAnchor(c, 5.0);
 
rootPane.getChildren().addAll(c);
myStage.show();
}
 
}

Решение задачи: «Повернуть текст на холсте»

textual
Листинг программы
        gc.setTransform(new Affine(new Rotate(150, 100, 200)));   // поворот на 150 градусов относительно координат (100,200)
        gc.fillText("Text", 90, 200);
        gc.setTransform(new Affine());   // обнуление поворота для вывода линии
 
        gc.strokeLine(90, 83, 300, 83);

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


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

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

7   голосов , оценка 4.571 из 5