Я делаю приложение 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();
}
}