Когда вы добавляете обработчик событий через FXML, метод в контроллере может не принимать параметры или один параметр с соответствующим типом события.В вашем случае, поскольку вы используете onKeyPressed
, вы можете определить метод контроллера следующим образом:
public void copyToClipboard(KeyEvent event) {
if (event.isShortcutDown() && event.getCode() == KeyCode.C) {
Clipboard cp = Clipboard.getSystemClipboard();
// add your data to the clipboard
}
}
Для получения дополнительной информации:
Чтобы узнать, каким типом Event
должен быть параметр, посмотрите насвойство обработчика событий, которое вы пытаетесь использовать.В вашем вопросе вы устанавливаете onKeyPressed
свойство через FXML.Это свойство имеет следующую подпись:
ObjectProperty<EventHandler<? super KeyEvent>>
Тип Event
, который EventHandler
должен обрабатывать, указан в универсальном типе EventHandler
;в этом случае KeyEvent
.
Существует много этих "свойств обработчика событий", объявленных для Node
.Некоторые подклассы добавят свои собственные - например, свойство onAction
ButtonBase
(использует ActionEvent
).
Если это поможет, вы можете подумать об установке свойств обработчика событий из FXML так же, как при использованииссылки на методы *:
public class Controller {
@FXML private TableView<?> topTable;
@FXML
private void initialize() {
topTable.setOnKeyPressed(this::copyToClipboard);
}
public void copyToClipboard(KeyEvent event) {}
}
* Это на самом деле не тот случай, поскольку то, что делает FXMLLoader
, более сложно (отражение).