JavaFX矩形旋转从左上角以外的点旋转

时间:2016-08-25 08:04:55

标签: java javafx

我已使用允许您设置数据透视的构造函数将JavaFx Rotation应用于矩形

new Rotate(45, 15, 15)

这会旋转矩形,但它会围绕放置它的15,15上的AnchorPane左上角旋转。是否可以围绕像圆心一样的点旋转矩形,矩形围绕环绕旋转。像矩形一样,轮胎上的一块胎面围绕中心枢轴旋转。谢谢你。

1 个答案:

答案 0 :(得分:1)

这适合我,我不知道你在做什么。

package helloworld;

import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.shape.Ellipse;
import javafx.scene.shape.Rectangle;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;

import java.time.Duration;

/**
 * Created by Matt on 25/08/16.
 */
public class RotatingARectangle extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");

        Group root = new Group();

        Rectangle rect = new Rectangle(190, 395, 20, 5);
        rect.setFill(Color.BLUE);
        Rotate rot = new Rotate(0, 200, 200);
        rect.getTransforms().add(rot);

        Ellipse path = new Ellipse(200, 200, 200, 200);
        path.setStroke(Color.RED);
        path.setFill(null);

        root.getChildren().add(rect);
        root.getChildren().add(path);

        Scene scene = new Scene(root, 400, 400);
        primaryStage.setScene(scene);
        primaryStage.show();

        Timeline line = new Timeline(30);

        KeyFrame key1 = new KeyFrame(
                new javafx.util.Duration(0),
                new KeyValue(rot.angleProperty(), 0 )
        );

        KeyFrame key2 = new KeyFrame(
            new javafx.util.Duration(1000),
            new KeyValue(rot.angleProperty(), 360 )
        );
        line.getKeyFrames().addAll(key1, key2);

        scene.addEventHandler(MouseEvent.MOUSE_CLICKED, evt->{
            line.playFromStart();
        });



    }

}

我将枢轴设置为椭圆的中心,然后使用时间轴将角度从0更改为360.