Как запретить нажатие клавиш во время метода в приложении Java? - PullRequest
0 голосов
/ 14 января 2019

Я делаю приложение с помощью JavaFX и Scene Builder. У меня есть метод, который делает анимацию Anchor Pane. Перевести переход и повернуть переход.

Когда я нажимаю «1» на клавиатуре, вызывается этот метод.

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

Как запретить нажатие клавиш во время анимации или как установить задержку между нажатиями клавиш?

Контроллер:

@FXML  private AnchorPane randomCard;

@FXML public void initialize(URL location, ResourceBundle resources) {    

//key commands
mainAnchor.setOnKeyPressed(event -> {
  switch (event.getCode()) {       
    case DIGIT1:          
      showRandomCard();
      break;
  }
});

//show random card in main window
 private void showRandomCard(){

    TranslateTransition tt = new TranslateTransition();
    tt.setDuration(Duration.millis(400));
    tt.setNode(randomCard);
    tt.setFromY(950);
    tt.setFromX(-600);
    tt.setToY(0);
    tt.setToX(0);        

    RotateTransition rt = new RotateTransition(Duration.millis(500), randomCard);
    rt.setByAngle(360);
    rt.setRate(1);
    rt.setCycleCount(1);        

    tt.play();       
    rt.play();

 }

1 Ответ

0 голосов
/ 14 января 2019

Просто используйте поле boolean и используйте обработчик onFinished анимации, который заканчивается последним, чтобы сбросить его до состояния, которое позволяет выполнять логику для создания / запуска анимации:

private boolean animationRunning = false;
private void showRandomCard(){
    if (!animationRunning) {
        animationRunning = true;
        TranslateTransition tt = new TranslateTransition();
        tt.setDuration(Duration.millis(400));
        tt.setNode(randomCard);
        tt.setFromY(950);
        tt.setFromX(-600);
        tt.setToY(0);
        tt.setToX(0);

        RotateTransition rt = new RotateTransition(Duration.millis(500), randomCard);
        rt.setByAngle(360);
        rt.setRate(1);
        rt.setCycleCount(1);
        rt.setOnFinished(evt -> animationRunning = false);

        tt.play();
        rt.play();
    }

}
...