2013-04-21 143 views
0

我正在处理交互式排序应用程序。我必须将数字表示为矩形,例如,当排序算法运行时,当交换两个数字时,矩形必须交换。我想用动画做到这一点。我怎样才能交换矩形?我目前正在使用转换来测试,但我遇到了一些问题。我在一个组中有两个矩形。当我尝试交换矩形时,两者将在中间相遇并停止。这里是代码:JavaFx - 交互式排序应用程序

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(); 

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

+0

? – 4lex1v 2013-04-21 08:57:36

+0

我想要一些动画。我不想立即换掉。 – 2013-04-21 08:59:36

回答

2

TranslateTransition适用于节点的translateX属性。因此,如果您使用setLayoutrelocate或者只是构造函数参数TranslateTransition定位矩形不适用于您。

您需要开始使用translateX坐标或使用Timeline而不是TranslateTransition

你可以阅读更多关于布局和JavaDoc for layout

这里翻译是基于平移X交换例如:

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(); 
} 
你想与一些动画掉它,还是改变颜色