обработать EventHandler из getOnKeyPressed - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть элемент в fxml, и я установил метод на onKeyPressed там

<TableView fx:id="topTable" onKeyPressed="#copyToClipboard" prefHeight="200.0" prefWidth="200.0">  

, но я не понимаю, как получить KeyCode из этого EventHandler в методе.

    @FXML
    private TableView<ObservableList<String>> topTable;
    ...
    public void copyToClipboard(){
    System.out.println(topTable.getOnKeyPressed().toString());
}

С помощью этого действия я хотел бы скопировать данные из ячеек TableColumn.Может кто-нибудь объяснить мне, что я могу сделать с Handler из getOnKeyPressed?

1 Ответ

0 голосов
/ 22 сентября 2018

Когда вы добавляете обработчик событий через 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, более сложно (отражение).

...