【问题标题】:Javafx rotation [closed]Javafx旋转[关闭]
【发布时间】:2018-11-14 04:43:54
【问题描述】:

我有一个应用程序,我在其中绘制一个矩形,然后将其旋转 90 度。在这种情况下,我有一个可以移动矩形的框架。但是在我转动它(90度的例子)之后,当区域向上移动时,矩形本身就会向右移动。旋转时,形状本身的坐标代理会转动什么? 轮换代码:

this.rotation.addListener((obs, old, fresh) -> { 
    Rotate rotate = new Rotate((double) fresh - (double) old,
        x.getValue().doubleValue() + (width.getValue().doubleValue() / 2),
        y.getValue().doubleValue() + (height.getValue().doubleValue() / 2));
    shape.getTransforms().add(rotate);
    rotate.angleProperty().bind(this.rotation);
});

当你旋转矩形时,它的坐标轴也随之旋转。

如何让坐标轴在更新时处于初始位置?

【问题讨论】:

  • 您能否在问题中包含更多详细信息。就像你的 Rectangle 的父级是什么一样。并为您的图像提供一些英文描述。我不确定其他人,我无法理解您从第二张和第三张图片中想表达的意思。请提供Minimal, Complete, and Verifiable example
  • 不清楚也没有minimal reproducible example。什么是“坐标代理”?哪个区域向上移动?

标签: java javafx


【解决方案1】:

我并不真正理解您的问题,但这是一个演示旋转和移动矩形的示例。双击矩形以旋转它。 (如果点击太快,双击并不完美。)。拖动矩形来移动它。

import javafx.application.Application;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.geometry.Point2D;
import javafx.scene.Scene;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;

public class JavaFXApplication extends Application
{

    final ObjectProperty<Point2D> mousePosition = new SimpleObjectProperty<>();

    public static void main(String[] args)
    {

        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage)
    {
        Rotate rotate = new Rotate();

        Rectangle rectangle = new Rectangle(33, 100, Color.GREEN);
        rectangle.setX((1200 / 2) - (33 / 2));
        rectangle.setY((900 / 2) - (100 / 2));
        rectangle.rotateProperty().bind(rotate.angleProperty());
        rectangle.setOnMouseClicked((event) -> {
            if (event.getButton().equals(MouseButton.PRIMARY)) {
                if (event.getClickCount() == 2) {
                    System.out.println("Double Clicked!");
                    rotate.setAngle(rotate.getAngle() + 90);

                }
            }
        });

        rectangle.setOnMousePressed((MouseEvent event) -> {
            mousePosition.set(new Point2D(event.getSceneX(), event.getSceneY()));
        });

        rectangle.setOnMouseDragged((MouseEvent event) -> {
            double deltaX = event.getSceneX() - mousePosition.get().getX();
            double deltaY = event.getSceneY() - mousePosition.get().getY();
            rectangle.setLayoutX(rectangle.getLayoutX() + deltaX);
            rectangle.setLayoutY(rectangle.getLayoutY() + deltaY);
            mousePosition.set(new Point2D(event.getSceneX(), event.getSceneY()));
        });

        Pane root = new Pane(rectangle);

        Scene scene = new Scene(root, 1200, 900, Color.LIGHTGRAY);
        primaryStage.setScene(scene);
        primaryStage.setTitle("Path Transition Example");
        primaryStage.show();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多