0

我正在开发一个交互式排序应用程序。我必须将数字表示为矩形,例如,在运行排序算法时,当交换两个数字时,必须交换矩形。我想用动画来做到这一点。如何交换矩形?我目前正在使用过渡进行测试,但我遇到了一些问题。我在一个组中有两个矩形。当我尝试交换矩形时,两者都会在中间相遇并停止。这是代码:

    Rectangle r1 = rectangles.get(numbers[0]);
    Rectangle r2 = rectangles.get(numbers[1]);

    TranslateTransition translateTransition = new TranslateTransition();

    translateTransition.setNode(r1);
    translateTransition.setDuration(Duration.millis(1000));
    translateTransition.setFromX(r1.getX());
    translateTransition.setToX(r2.getX());

    TranslateTransition translateTransition2 = new TranslateTransition();

    translateTransition2.setNode(r2);
    translateTransition2.setDuration(Duration.millis(1000));
    translateTransition2.setFromX(r2.getX());
    translateTransition2.setToX(r1.getX());
    translateTransition2.play();

    translateTransition.play();

我需要一个与画布类似的窗格。我需要能够设置矩形坐标。

4

1 回答 1

2

TranslateTransition使用translateX节点的属性。因此,如果您使用 或仅使用构造函数参数 TranslateTransition 定位矩形,则setLayoutrelocate您不起作用。

您要么需要开始使用translateX坐标,要么使用Timeline代替TranslateTransition.

您可以阅读有关布局的更多信息并在JavaDoc 中翻译以进行布局

这是基于 translateX 的交换示例:

public void start(Stage primaryStage) {
    final Rectangle r1 = new Rectangle(50, 50, Color.RED);
    final Rectangle r2 = new Rectangle(50, 50, Color.BLUE);

    // note I use translate to position rectangles
    r1.setTranslateX(50);
    r2.setTranslateX(250);

    Button btn = new Button();
    btn.setText("Move it");
    btn.relocate(100, 100);
    btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            double x1 = r1.getTranslateX();
            double x2 = r2.getTranslateX();

            TranslateTransition translateTransition = new TranslateTransition();
            translateTransition.setNode(r1);
            translateTransition.setDuration(Duration.millis(1000));
            translateTransition.setToX(x2);

            TranslateTransition translateTransition2 = new TranslateTransition();
            translateTransition2.setNode(r2);
            translateTransition2.setDuration(Duration.millis(1000));
            translateTransition2.setToX(x1);

            translateTransition2.play();
            translateTransition.play();
        }
    });

    Pane root = new Pane();
    root.getChildren().addAll(btn, r1, r2);

    Scene scene = new Scene(root, 400, 350);

    primaryStage.setTitle("Hello World!");
    primaryStage.setScene(scene);
    primaryStage.show();
}
于 2013-04-22T00:21:19.897 回答