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