在我的上一篇文章中,感谢James回答我的问题。但是,我仍然不太明白为什么在将KeyCode.A更改为KeyCode.DOWN后,键盘焦点会转移到txt1而不是txt2?
代码对我来说非常简单。通过释放向下箭头按钮,按钮的setOnKeyReleased方法捕获这样的特定事件并调用txt2.requestFocus()方法将键盘焦点移动到文本字段txt2。除非我在这里遗漏任何内容,否则我不明白为什么焦点会转移到txt1。
任何人都有任何想法?我在Mac上测试了这段代码。
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
StackPane root = new StackPane();
TextField txt1 = new TextField();
TextField txt2 = new TextField();
VBox vbox = new VBox();
vbox.getChildren().add(btn);
vbox.getChildren().add(txt1);
vbox.getChildren().add(txt2);
root.getChildren().add(vbox);
Scene scene = new Scene(root, 300, 250);
btn.setOnKeyReleased((KeyEvent e) ->{
if (e.getCode() == KeyCode.DOWN) { //<---MAKES THE CHANGE FROM
//KeyCode.A TO KeyCode.DOWN
txt2.requestFocus();
}
});
txt2.addEventFilter(KeyEvent.ANY, e -> {
System.out.printf("Key event on text field: type=%s, code=%s,
character=%s%n",
e.getEventType(), e.getCode(), e.getCharacter());
});
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
btn.requestFocus();
}