2013-04-21 141 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(); 
} 
你想與一些動畫掉它,還是改變顏色