Как анимировать кнопку с помощью временной шкалы? - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу анимировать кнопку. Я хочу, чтобы он изменил свою позицию после нажатия на него. Я написал такой код, но он не работает. В этом случае ошибки не отображаются в консоли. Кнопка просто не реагирует на нажатия.

double stopPosition = 100;
KeyValue kk2 = new KeyValue(btn.layoutXProperty(), stopPosition, Interpolator.LINEAR);
KeyFrame kk = new KeyFrame(Duration.millis(5000),kk2);
Timeline timeline = new Timeline();
timeline.getKeyFrames().add(kk);
timeline.setCycleCount(1);

        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
                timeline.play();
            }
        });

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Вы должны анимировать координаты перевода, а не координаты макета.

double deltaPosition = 100; //translation gets added to your current layoutX
KeyValue kk2 = new KeyValue(btn.translateXProperty(), deltaPosition, Interpolator.LINEAR);
KeyFrame kk = new KeyFrame(Duration.millis(5000),kk2);
Timeline timeline = new Timeline();
timeline.getKeyFrames().add(kk);
timeline.setCycleCount(1);

btn.setOnAction(ae -> {
        System.out.println("Hello World!");
        timeline.play();
    }
);

Значения макета перезаписываются панелями макета, такими как HBox, AnchorPane, но не Group или Pane. В качестве альтернативы, установите setManaged(false) на кнопку, чтобы родительский контейнер не мешал его макету, но вам придется делать все макеты самостоятельно.

0 голосов
/ 07 ноября 2018

Я предполагаю, что вы поместили кнопку в какой-то макет, который заботится о позиционировании. Если вы измените layoutX, это означает, что во время следующего прохода макета Button просто возвращается "туда, где он принадлежит" родительским макетом.

Если вы хотите переместить Button, вам следует выбрать другой макет в качестве родительского или использовать вместо него свойство translateX. translateX перемещает Button относительно позиции, в которой его размещает родительский макет (layoutX).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...