JavaFx KeyEvent на Rectangle не работает - PullRequest
0 голосов
/ 23 сентября 2019

У меня Rectangle на GridPane, и после добавления KeyEvent он не срабатывает.это мой код:

    Rectangle rectangle = new Rectangle();
    rectangle.setX(500.0f); 
    rectangle.setY(200.0f); 
    rectangle.setWidth(400.0f); 
    rectangle.setHeight(300.0f); 

    //add key event
    rectangle.setOnKeyTyped(event->{
       System.out.println("TYPED - Character: "+event.getCharacter()+
    ", Code: " + event.getCode() +
     ", Text: " +event.getText());
   });

    GridPane.setRowIndex(rectangle, 0);
    GridPane.setColumnIndex(rectangle, 0);
    gridPane.getChildren().add(rectangle);

Нажатие любой клавиши ничего не печатает.Что может быть не так с моим кодом?

1 Ответ

2 голосов
/ 23 сентября 2019

Проблема в том, что у Rectangle нет фокуса, а KeyEvents не срабатывает на узлах, которые не имеют фокуса.Вы можете попросить о фокусе, вызвав rectangle.requestFocus().Кажется, что просто нажав на него, вы не получите фокус, поэтому вы должны дать его «вручную».Если вы не хотите нажимать, вы можете решить, когда вы хотите получить прямоугольник в качестве фокуса, и после того, как он получит фокус, он также вызовет ключевые события.

Упомянутый мною onClick будет выглядеть какэто:

rectangle.setOnMouseClicked(event -> rectangle.requestFocus());

...