2013-04-21 2 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

+0

Я хочу несколько анимаций. Я не хочу мгновенного обмена. –

ответ

2

TranslateTransition Работает с translateX Недвижимость узла. Таким образом, если вы разместили прямоугольники с помощью setLayout, relocate или просто параметр конструктора TranslateTransition не сработает для вас.

Вам необходимо либо начать использовать координаты translateX, либо использовать Timeline вместо TranslateTransition.

Вы можете прочитать больше о макете и переводить в JavaDoc for layout

Вот это 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(); 
} 
Смежные вопросы