Я делаю приложение JavaFX и хочу назначить некоторые действия при нажатии клавиши.
У меня есть KeyCode SHIFT, назначенный для действия, которое делает непрозрачность AnchorPane равным 1,0, и у меня KeyCode SLASH, назначенный для действия, которое устанавливает ту же непрозрачность AnchorPane равным 0,0.
Я хочу, чтобы клавиши рефакторинга и все действия были настроены на один код клавиши DEAD_TILDE.
Я хочу, чтобы нажатие клавиши на клавиатуре действовало как нажатие клавиши переключения. Когда я нажимаю клавишу DEAD_TILDE, непрозрачность AnchorPane должна быть установлена равной 1,0, если я снова нажимаю ту же самую DEAD_TILDE, непрозрачность AnchorPane должна быть установлена как 0,0
.
Как я могу это сделать?
Я пытался создать логическое значение и использовать его в методе. Но id не работает, или я просто сделал это неправильно:
@FXML private AnchorPane mainAnchor, previewCard;
private boolean opacityCard = false;
@FXML
public void initialize(URL location, ResourceBundle resources) {
showCardPreview();
}
private void showCardPreview() {
mainAnchor.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.DEAD_TILDE || !opacityCard) {
opacityCard = false;
previewCard.setOpacity(1.0);
} else if(event.getCode() == KeyCode.DEAD_TILDE || true) {
opacityCard = true;
previewCard.setOpacity(0.0);
}
});
}
Вот так я назначил два кода клавиш для двух действий:
@FXML private AnchorPane mainAnchor, previewCard;
//key commands
mainAnchor.setOnKeyPressed(event -> {
switch (event.getCode()) {
case SHIFT:
previewCard.setOpacity(1.0);
break;
case SLASH:
previewCard.setOpacity(0.0);
break;
}
});
}
EDIT:
Я пытался использовать это, но ничего не происходит:
@FXML
public void initialize(URL location, ResourceBundle resources) {
mainAnchor.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.DEAD_TILDE) {
previewCard.setOpacity(previewCard.getOpacity() == 0.0 ? 1.0 : 0.0);
event.consume();
}
});
}
РЕДАКТИРОВАТЬ 2:
Я обнаружил, что в моем коде есть EventFilter, поэтому я просто рефакторил его так, и это испортилось! Я также изменил код ключа на DIGIT4, потому что знак DEAD_TILDA не работает
//assign keys to some events
mainAnchor.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode() == KeyCode.SPACE) {
event.consume();
flipCard();
} else if (event.getCode() == KeyCode.DIGIT4) {
event.consume();
previewCard.setOpacity(previewCard.getOpacity() == 0.0 ? 1.0 : 0.0);
}
});