我正在用JavaFX编写一个简单的计算器应用程序。除ENTER键外,每个键盘事件均已成功捕获。 EQUALS(“ =”)是唯一会触发计算功能的硬件键。我搜寻了该站点上甚至可以远程处理键盘事件处理的每个问题,我仔细阅读了Oracle站点上的文档。以下是我的代码的一些摘录(我省去了检查所有可能的KeyCode简洁性的大部分行):
@FXML
private void handleKeyboardEvent(KeyEvent event) {
KeyCode keyCode = event.getCode();
if (event.getCharacter().equals("\r") || event.getCharacter().equals("\n")) {
onEqualsButtonPressed();
}
switch (keyCode) {
case ESCAPE:
textFieldDisplayEquation.clear();
textFieldDisplayResult.clear();
break;
case EQUALS:
if (event.isShiftDown()) {
if (textFieldDisplayEquation.getText().length() == 0) {
textFieldDisplayEquation.clear();
break;
} else {
textFieldDisplayEquation.appendText(" + ");
break;
}
} else {
onEqualsButtonPressed();
break;
}
case ENTER:
onEqualsButtonPressed();
break;
}
}
当按下ENTER键时,先前输入到TextField中的文本消失了。 正如我所说,其他所有键盘onKeyPress事件均已成功捕获,并且计算器运行正常(包括单击GUI按钮)!这真让我抓狂。任何建议将不胜感激。
答案 0 :(得分:0)
好的。看来,只要清除两个文本字段,就必须告诉GridPane请求焦点。完成此操作后,ENTER键每次都起作用 以下是相关的代码段:
@FXML
private GridPane root;
@FXML
private void onButtonClearClicked() {
labelMessage.setText("");
textFieldDisplayEquation.clear();
textFieldDisplayResult.clear();
root.requestFocus();
}
感谢所有花时间回答或发表评论的人!