Как игнорировать нажатие клавиши на клавиатуре при вызове какого-либо метода? - PullRequest
0 голосов
/ 01 февраля 2019

Я делаю приложение JavaFX.

Я назначил нажатие клавиш на клавиатуре в начале в методе Initizlize. Когда я нажимаю клавишу "1", в главном окне появляется произвольная карточка с текстом.Я могу сложить эту карту и увидеть другой текст, нажав «R» на клавиатуре.Я также могу удалить эту карту справа «BACKSPACE» и удалить слева «ESCAPE»

Проблема заключается в следующем: если я не нажимаю цифровые клавиши, такие как «1», чтобы показать мою карту в главном окне.Коды клавиш "BACKSPACE" и "ESCAPE" по-прежнему работают, и если я нажимаю на нее, карта удаляется (некоторая анимация), даже если в главном окне карты нет

ТАК, я решила отключить нажатия клавиш "ESCAPE "и" BACKSPACE ", если в главном окне нет карты, а затем включить ее, когда карта появляется в главном окне.

Другими словами, чтобы включить" ESCAPE "и" BACKSPACE "только после некоторого методаэто показывает карту в главном окне

Как я могу это сделать?

Контроллер:

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

//key commands
mainAnchor.setOnKeyPressed(event -> {
  switch (event.getCode()) {


    case DIGIT1:          
      showRandomQuestionCat1();
      showRandomCard();

      break;

    case DIGIT2:          
      showRandomQuestionCat2();
      showRandomCard();
      break;    

    case R:
      flipCardBack();
      break;


    case ESCAPE:
      hideRandomCard();
      break;

    case BACK_SPACE:
      removeCard();
      flipCardBackSpace();
      break;
     }
   });

 }

Вот как отображается карта:

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

if (!animationRunning) {
  animationRunning = true;

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

  TranslateTransition ttRandomBack = new TranslateTransition();
  ttRandomBack.setDuration(Duration.millis(300));
  ttRandomBack.setNode(randomCardBack);
  ttRandomBack.setFromY(950);
  ttRandomBack.setFromX(-600);
  ttRandomBack.setToY(0);
  ttRandomBack.setToX(0);

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

  RotateTransition rtBack = new RotateTransition(Duration.millis(300), randomCardBack);
  rtBack.setByAngle(360);
  rtBack.setRate(1);
  rtBack.setCycleCount(1);
  rtBack.setOnFinished(evt -> animationRunning = false);

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

Вот как извлекается карточка с текстом:

private void removeCard() {

if (!animationRunning) {
  animationRunning = true;

  TranslateTransition tt2 = new TranslateTransition();
  tt2.setDuration(Duration.millis(300));
  tt2.setNode(outOfCards);
  tt2.setFromY(0);
  tt2.setFromX(0);
  tt2.setToY(-950);
  tt2.setToX(600);

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



  TranslateTransition ttRandomBack = new TranslateTransition();
  ttRandomBack.setDuration(Duration.millis(300));
  ttRandomBack.setNode(randomCardBack);
  ttRandomBack.setFromY(0);
  ttRandomBack.setFromX(0);
  ttRandomBack.setToY(-950);
  ttRandomBack.setToX(600);

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

  RotateTransition rt2 = new RotateTransition(Duration.millis(300), outOfCards);
  rt2.setByAngle(360);
  rt2.setRate(1);
  rt2.setCycleCount(1);
  rt2.setOnFinished(evt -> animationRunning = false);

  RotateTransition rtBack = new RotateTransition(Duration.millis(300), randomCardBack);
  rtBack.setByAngle(360);
  rtBack.setRate(1);
  rtBack.setCycleCount(1);
  rtBack.setOnFinished(evt -> animationRunning = false);

  tt2.play();
  rt2.play();
  tt.play();
  ttRandomBack.play();

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